[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-3273) One-to-Many relationship not working with custom Loader
Darren Hicks (JIRA)
noreply at atlassian.com
Thu May 8 02:16:33 EDT 2008
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-3273?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_30144 ]
Darren Hicks commented on HHH-3273:
-----------------------------------
Oh yeah, the bug occurs ( to summarize a bit of the forum activity ) when the collection is accessed via the parent and an iterator is then used...
java.lang.NullPointerException
at org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:250)
at com.swbyjeff.ContainerTest.testContainerLoad(ContainerTest.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> One-to-Many relationship not working with custom Loader
> --------------------------------------------------------
>
> Key: HHH-3273
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3273
> Project: Hibernate3
> Issue Type: Bug
> Affects Versions: 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6
> Environment: hibernate-3.2.6.jar
> Reporter: Darren Hicks
> Original Estimate: 2 hours
> Remaining Estimate: 2 hours
>
> Within the context of a One-to-Many relationship, NamedQueryCollectionInitializer .initialize() never actually populates the PersistantBag on the parent after it calls query.setCollectionKey( key ).setFlushMode( FlushMode.MANUAL ).list() to retrieve the children.
> This is documented in the forums here: http://forums.hibernate.org/viewtopic.php?t=986428
> Additionally, the poster has a fix posted which may solve the problem, or at least lay out the groundwork for a solution. Here is the proposed implementation of NamedQueryCollectionInitializer.initialize():
> public void initialize(Serializable key, SessionImplementor session)
> throws HibernateException {
> if (log.isDebugEnabled()) {
> log.debug("initializing collection: " + persister.getRole()
> + " using named query: " + queryName);
> }
> // TODO: is there a more elegant way than downcasting?
> AbstractQueryImpl query = (AbstractQueryImpl) session
> .getNamedSQLQuery(queryName);
> if (query.getNamedParameters().length > 0) {
> query.setParameter(query.getNamedParameters()[0], key, persister
> .getKeyType());
> } else {
> query.setParameter(0, key, persister.getKeyType());
> }
> List list = query.setCollectionKey(key).setFlushMode(FlushMode.MANUAL)
> .list();
> // Uh, how 'bout we save the collection for later retrieval?
> CollectionKey collectionKey = new CollectionKey(persister, key, session
> .getEntityMode());
> for (Object object : session.getPersistenceContext()
> .getCollectionsByKey().keySet()) {
> if (collectionKey.equals(object)) {
> PersistentCollection persistentCollection = session
> .getPersistenceContext().getCollection(collectionKey);
> Serializable[] serializables = new Serializable[list.size()];
> for (int i = 0; i < list.size(); i++) {
> serializables[i] = persister.getElementType().disassemble(
> list.get(i), session,
> persistentCollection.getOwner());
> }
> persistentCollection.initializeFromCache(persister,
> serializables, persistentCollection.getOwner());
> persistentCollection.setSnapshot(key, persistentCollection
> .getRole(), serializables);
> persistentCollection.afterInitialize();
> session.getPersistenceContext().getCollectionEntry(
> persistentCollection).postInitialize(
> persistentCollection);
> }
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list