From: Mark W. <mor...@SM...> - 2002-10-11 09:36:05
|
Hi, Can anyone tell me why I'm getting the following error? The error I get with the current CVS build and the 1.1.4b build is different, but either way, I still don't understand what the problem is. Current CVS build: Hibernate: SELECT Refer0.referenceSequenceId, Pharm1.pharmgkbAccessionId AS pharmgkbAccessionId0, Pharm1.pharmgkbObjTypeId AS pharmgkbObjTypeId0, Pharm1.name AS name0, Pharm1.projectId AS projectId0, Pharm1.modified_timestamp AS modified_timestamp0, Refer2.referenceSequenceId AS referenceSequenceId1, Refer2.start_gene AS start_gene1, Refer2.stop_gene AS stop_gene1, Refer2.sequence AS sequence1, Proje3.projectId AS projectId2, Proje3.projectName AS projectName2 FROM ReferenceSequenceGeneAssoc Refer0, PharmGKBObjects Pharm1, ReferenceSequences Refer2, Projects Proje3 WHERE Refer0.geneId = ? AND Refer0.referenceSequenceId=Pharm1.pharmgkbAccessionId(+) AND Pharm1.pharmgkbAccessionId=Refer2.referenceSequenceId(+) AND Pharm1.projectId=Proje3.projectId(+) 02:18:59,772 ERROR PersistentCollection:87 - Failed to lazily initialize a collection java.lang.NullPointerException at cirrus.hibernate.LockMode.greaterThan(LockMode.java:30) at cirrus.hibernate.impl.SessionImpl.lock(SessionImpl.java:1121) at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1412) at cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1314) at cirrus.hibernate.impl.SessionImpl.internalLoadOneToOne(SessionImpl.java:1273) at cirrus.hibernate.type.OneToOneType.resolveIdentifier(OneToOneType.java:68) at cirrus.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:1456) at cirrus.hibernate.loader.Loader.doFind(Loader.java:144) at cirrus.hibernate.loader.Loader.loadCollection(Loader.java:448) at cirrus.hibernate.loader.CollectionLoader.initialize(CollectionLoader.java:67) at cirrus.hibernate.impl.SessionImpl.initialize(SessionImpl.java:2222) at cirrus.hibernate.collections.PersistentCollection.initialize(PersistentCollection.java:83) at cirrus.hibernate.collections.PersistentCollection.read(PersistentCollection.java:53) at cirrus.hibernate.collections.Set.iterator(Set.java:134) at org.pharmgen.db.DbDocumentRoot.addAccessionObject(DbDocumentRoot.java:166) at org.pharmgen.xml.ParserEventHandler.startElement(ParserEventHandler.java:282) at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at org.pharmgen.xml.Parser.parse(Parser.java:126) at test.XmlParser.main(XmlParser.java:44) 1.1.4b build: Hibernate: SELECT Refer0.referenceSequenceId, Pharm1.pharmgkbAccessionId AS pharmgkbAccessionId0, Pharm1.pharmgkbObjTypeId AS pharmgkbObjTypeId0, Pharm1.name AS name0, Pharm1.projectId AS projectId0, Pharm1.modified_timestamp AS modified_timestamp0, Refer2.referenceSequenceId AS referenceSequenceId1, Refer2.start_gene AS start_gene1, Refer2.stop_gene AS stop_gene1, Refer2.sequence AS sequence1, Proje3.projectId AS projectId2, Proje3.projectName AS projectName2 FROM ReferenceSequenceGeneAssoc Refer0, PharmGKBObjects Pharm1, ReferenceSequences Refer2, Projects Proje3 WHERE Refer0.geneId = ? AND Refer0.referenceSequenceId=Pharm1.pharmgkbAccessionId(+) AND Pharm1.pharmgkbAccessionId=Refer2.referenceSequenceId(+) AND Pharm1.projectId=Proje3.projectId(+) 02:30:50,484 ERROR PersistentCollection:87 - Failed to lazily initialize a collection cirrus.hibernate.TransientObjectException: You tried to lock a transient instance at cirrus.hibernate.impl.SessionImpl.lock(SessionImpl.java:1113) at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1404) at cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1306) at cirrus.hibernate.impl.SessionImpl.internalLoadOneToOne(SessionImpl.java:1265) at cirrus.hibernate.type.OneToOneType.resolveIdentifier(OneToOneType.java:68) at cirrus.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:1448) at cirrus.hibernate.loader.Loader.doFind(Loader.java:144) at cirrus.hibernate.loader.Loader.loadCollection(Loader.java:448) at cirrus.hibernate.loader.CollectionLoader.initialize(CollectionLoader.java:67) at cirrus.hibernate.impl.SessionImpl.initialize(SessionImpl.java:2213) at cirrus.hibernate.collections.PersistentCollection.initialize(PersistentCollection.java:83) at cirrus.hibernate.collections.PersistentCollection.read(PersistentCollection.java:53) at cirrus.hibernate.collections.Set.iterator(Set.java:134) at org.pharmgen.db.DbDocumentRoot.addAccessionObject(DbDocumentRoot.java:166) at org.pharmgen.xml.ParserEventHandler.startElement(ParserEventHandler.java:282) at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at org.pharmgen.xml.Parser.parse(Parser.java:126) at test.XmlParser.main(XmlParser.java:44) Thanks, -Mark |
From: Mark W. <mor...@SM...> - 2002-10-12 01:10:11
|
A few more details on the exception: The session is still open when I try to access the lazily initialized collection. The code is as simple as this: Gene gene = (Gene)session.load(DbGene.class, "PA6222"); Set refSeqs = gene.getReferenceSequences(); Iterator it = refSeqs.iterator(); Which triggers the exception. The NPE in the CVS build looks like a bug in the new locking code, but that doesn't explain why I'm getting this exception with the 1.1.4b build. Here's the mapping I'm using for the set: <set role="referenceSequences" table="ReferenceSequenceGeneAssoc" lazy="true" cascade="all"> <key column="geneId" type="string" /> <many-to-many column="referenceSequenceId" class="org.pharmgen.db.DbReferenceSequence" /> </set> Anyone have any idea what the problem might be? Thanks, -Mark |
From: Mark W. <mor...@SM...> - 2002-10-12 01:28:26
|
Mark Woon wrote: > Here's the mapping I'm using for the set: > > <set role="referenceSequences" table="ReferenceSequenceGeneAssoc" > lazy="true" cascade="all"> > <key column="geneId" type="string" /> > <many-to-many column="referenceSequenceId" > class="org.pharmgen.db.DbReferenceSequence" /> > </set> And if I change it to lazy="false," I get: java.lang.NullPointerException at cirrus.hibernate.LockMode.greaterThan(LockMode.java:30) at cirrus.hibernate.impl.SessionImpl.lock(SessionImpl.java:1121) at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1412) at cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1314) at cirrus.hibernate.impl.SessionImpl.internalLoadOneToOne(SessionImpl.java:1273) at cirrus.hibernate.type.OneToOneType.resolveIdentifier(OneToOneType.java:68) at cirrus.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:1456) at cirrus.hibernate.loader.Loader.doFind(Loader.java:144) at cirrus.hibernate.loader.Loader.loadCollection(Loader.java:448) at cirrus.hibernate.loader.CollectionLoader.initialize(CollectionLoader.java:67) at cirrus.hibernate.impl.SessionImpl.initialize(SessionImpl.java:2222) at cirrus.hibernate.collections.PersistentCollection.getInitialValue(PersistentCollection.java:69) at cirrus.hibernate.type.PersistentCollectionType.getCollection(PersistentCollectionType.java:69) at cirrus.hibernate.type.PersistentCollectionType.resolveIdentifier(PersistentCollectionType.java:198) at cirrus.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:1456) at cirrus.hibernate.loader.Loader.doFind(Loader.java:171) at cirrus.hibernate.loader.Loader.loadEntity(Loader.java:435) at cirrus.hibernate.loader.EntityLoader.load(EntityLoader.java:61) at cirrus.hibernate.persister.EntityPersister.load(EntityPersister.java:406) at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1440) at cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1314) at cirrus.hibernate.impl.SessionImpl.load(SessionImpl.java:1253) at misc.Test.test(Test.java:61) at misc.Test.main(Test.java:40) With the 1.1.4b build I get: cirrus.hibernate.TransientObjectException: You tried to lock a transient instance at cirrus.hibernate.impl.SessionImpl.lock(SessionImpl.java:1113) at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1404) at cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1306) at cirrus.hibernate.impl.SessionImpl.internalLoadOneToOne(SessionImpl.java:1265) at cirrus.hibernate.type.OneToOneType.resolveIdentifier(OneToOneType.java:68) at cirrus.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:1448) at cirrus.hibernate.loader.Loader.doFind(Loader.java:144) at cirrus.hibernate.loader.Loader.loadCollection(Loader.java:448) at cirrus.hibernate.loader.CollectionLoader.initialize(CollectionLoader.java:67) at cirrus.hibernate.impl.SessionImpl.initialize(SessionImpl.java:2213) at cirrus.hibernate.collections.PersistentCollection.getInitialValue(PersistentCollection.java:69) at cirrus.hibernate.type.PersistentCollectionType.getCollection(PersistentCollectionType.java:69) at cirrus.hibernate.type.PersistentCollectionType.resolveIdentifier(PersistentCollectionType.java:198) at cirrus.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:1448) at cirrus.hibernate.loader.Loader.doFind(Loader.java:171) at cirrus.hibernate.loader.Loader.loadEntity(Loader.java:435) at cirrus.hibernate.loader.EntityLoader.load(EntityLoader.java:61) at cirrus.hibernate.persister.EntityPersister.load(EntityPersister.java:666) at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1432) at cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1306) at cirrus.hibernate.impl.SessionImpl.load(SessionImpl.java:1245) at misc.Test.test(Test.java:61) at misc.Test.main(Test.java:40) BTW, all this works with 1.3! -Mark |
From: Gavin K. <ga...@ap...> - 2002-10-12 08:47:52
|
I think I've fixed this problem now. (But I did it without first reproducing the bug.) Mark, would you do me a favor, please: (1) check the fix works (2) add a regression test to FooBarTest that Thanks.... Gavin ----- Original Message ----- From: "Mark Woon" <mor...@SM...> Cc: "Hibernate Mailing List" <hib...@li...> Sent: Saturday, October 12, 2002 11:28 AM Subject: Re: [Hibernate] Failure to lazily initialize a collection > Mark Woon wrote: > > > Here's the mapping I'm using for the set: > > > > <set role="referenceSequences" table="ReferenceSequenceGeneAssoc" > > lazy="true" cascade="all"> > > <key column="geneId" type="string" /> > > <many-to-many column="referenceSequenceId" > > class="org.pharmgen.db.DbReferenceSequence" /> > > </set> > > > And if I change it to lazy="false," I get: > > java.lang.NullPointerException > at cirrus.hibernate.LockMode.greaterThan(LockMode.java:30) > at cirrus.hibernate.impl.SessionImpl.lock(SessionImpl.java:1121) > at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1412) > at > cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1314) > at > cirrus.hibernate.impl.SessionImpl.internalLoadOneToOne(SessionImpl.java:1273 ) > at > cirrus.hibernate.type.OneToOneType.resolveIdentifier(OneToOneType.java:68) > at > cirrus.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:1456) > at cirrus.hibernate.loader.Loader.doFind(Loader.java:144) > at cirrus.hibernate.loader.Loader.loadCollection(Loader.java:448) > at > cirrus.hibernate.loader.CollectionLoader.initialize(CollectionLoader.java:67 ) > at > cirrus.hibernate.impl.SessionImpl.initialize(SessionImpl.java:2222) > at > cirrus.hibernate.collections.PersistentCollection.getInitialValue(Persistent Collection.java:69) > at > cirrus.hibernate.type.PersistentCollectionType.getCollection(PersistentColle ctionType.java:69) > at > cirrus.hibernate.type.PersistentCollectionType.resolveIdentifier(PersistentC ollectionType.java:198) > at > cirrus.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:1456) > at cirrus.hibernate.loader.Loader.doFind(Loader.java:171) > at cirrus.hibernate.loader.Loader.loadEntity(Loader.java:435) > at cirrus.hibernate.loader.EntityLoader.load(EntityLoader.java:61) > at > cirrus.hibernate.persister.EntityPersister.load(EntityPersister.java:406) > at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1440) > at > cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1314) > at cirrus.hibernate.impl.SessionImpl.load(SessionImpl.java:1253) > at misc.Test.test(Test.java:61) > at misc.Test.main(Test.java:40) > > With the 1.1.4b build I get: > > cirrus.hibernate.TransientObjectException: You tried to lock a transient > instance > at cirrus.hibernate.impl.SessionImpl.lock(SessionImpl.java:1113) > at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1404) > at > cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1306) > at > cirrus.hibernate.impl.SessionImpl.internalLoadOneToOne(SessionImpl.java:1265 ) > at > cirrus.hibernate.type.OneToOneType.resolveIdentifier(OneToOneType.java:68) > at > cirrus.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:1448) > at cirrus.hibernate.loader.Loader.doFind(Loader.java:144) > at cirrus.hibernate.loader.Loader.loadCollection(Loader.java:448) > at > cirrus.hibernate.loader.CollectionLoader.initialize(CollectionLoader.java:67 ) > at > cirrus.hibernate.impl.SessionImpl.initialize(SessionImpl.java:2213) > at > cirrus.hibernate.collections.PersistentCollection.getInitialValue(Persistent Collection.java:69) > at > cirrus.hibernate.type.PersistentCollectionType.getCollection(PersistentColle ctionType.java:69) > at > cirrus.hibernate.type.PersistentCollectionType.resolveIdentifier(PersistentC ollectionType.java:198) > at > cirrus.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:1448) > at cirrus.hibernate.loader.Loader.doFind(Loader.java:171) > at cirrus.hibernate.loader.Loader.loadEntity(Loader.java:435) > at cirrus.hibernate.loader.EntityLoader.load(EntityLoader.java:61) > at > cirrus.hibernate.persister.EntityPersister.load(EntityPersister.java:666) > at cirrus.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:1432) > at > cirrus.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1306) > at cirrus.hibernate.impl.SessionImpl.load(SessionImpl.java:1245) > at misc.Test.test(Test.java:61) > at misc.Test.main(Test.java:40) > > > BTW, all this works with 1.3! > > -Mark > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > hibernate-devel mailing list > hib...@li... > https://lists.sourceforge.net/lists/listinfo/hibernate-devel |
From: Gavin K. <ga...@ap...> - 2002-10-12 02:52:34
|
I knew about an exception in the new Locking code in 1.1.4, 1.1.4b and I fixed it in CVS. But I must have missed something. Thanks for picking up on this, Mark. I'll look into it ASAP. ----- Original Message ----- From: "Mark Woon" <mor...@SM...> Cc: "Hibernate Mailing List" <hib...@li...> Sent: Saturday, October 12, 2002 11:09 AM Subject: Re: [Hibernate] Failure to lazily initialize a collection > A few more details on the exception: > > The session is still open when I try to access the lazily initialized > collection. The code is as simple as this: > > Gene gene = (Gene)session.load(DbGene.class, "PA6222"); > Set refSeqs = gene.getReferenceSequences(); > Iterator it = refSeqs.iterator(); > > Which triggers the exception. The NPE in the CVS build looks like a bug > in the new locking code, but that doesn't explain why I'm getting this > exception with the 1.1.4b build. > > Here's the mapping I'm using for the set: > > <set role="referenceSequences" table="ReferenceSequenceGeneAssoc" > lazy="true" cascade="all"> > <key column="geneId" type="string" /> > <many-to-many column="referenceSequenceId" > class="org.pharmgen.db.DbReferenceSequence" /> > </set> > > Anyone have any idea what the problem might be? > > Thanks, > -Mark > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > hibernate-devel mailing list > hib...@li... > https://lists.sourceforge.net/lists/listinfo/hibernate-devel |