[Biojava-l] Hibernate Exception and suggestion for change in BioSqlSchema
Deepak Sheoran
sheoran143 at gmail.com
Wed Feb 3 14:07:44 UTC 2010
Hi guys,
A couple of days back I was having some problem with hibernate
exception but that exception got resolved and the reference to
that email is:
http://old.nabble.com/Hibernate-Exception-when-persisting-some-richsequence-object-to-biosql-schema-to27299245.html
On Richard suggestion in above link I am able to resolve some of
issues but then, I got stuck in to some other error with hibernate
and then decided to investigate the matter and below are some
facts and information which I found and I guess it is going to
affect all of us.
1. The "Reference" table in bioSql schema have unique constraint on
"dbxref_id" column (CONSTRAINT reference_dbxref_id_key UNIQUE
(dbxref_id)). Which mean only one entry in reference table can use
on dbxref_id.
This Works wells but in cases when you have little variation in
value of following column "location", "title", "authors" and all
these variation refers to same PUBMED_ID. Then we can't persist or
create a richsequence object .
Now when you tie RichObjectFactory to a active hibernate session
then the class "BioSqlRichObjectBuilder" have method called
"buildObject(Class clazz, List paramsList) " which is responsible
for looking up details of object in the database and if it find
one then it will return that object, else it will try to persist
the new object into the database.
But problem is with below part of that method:
.....LineNumber: 114
else if (SimpleDocRef.class.isAssignableFrom(clazz))
{ queryType = "DocRef";
// convert List constructor to String representation for
query
ourParamsList.set(0,
DocRefAuthor.Tools.generateAuthorString((List)ourParamsList.get(0), true));
if (ourParamsList.size()<3) {
queryText = "from DocRef as cr where cr.authors = ? and
cr.location = ? and cr.title is null";
} else {
queryText = "from DocRef as cr where cr.authors = ? and
cr.location = ? and cr.title = ?";
}
}
..LineNubmer: 123
Now when hibernate search the database, it won't find any other
record in "reference" table because those two record are different
in string comparison, so it will return a new object back to
"GenbankFormat" to following piece of code
....LineNumber: 447
else {
try {
CrossRef cr =
(CrossRef)RichObjectFactory.getObject(SimpleCrossRef.class,new
Object[]{dbname, raccession, new Integer(0)});
RankedCrossRef rcr = new SimpleRankedCrossRef(cr, ++rcrossrefCount);
rlistener.getCurrentFeature().addRankedCrossRef(rcr);
} catch (ChangeVetoException e) {
throw new ParseException(e+", accession:"+accession);
}
}
.....LineNumber:455
Then we will add that object to rlistener. And move to next part
of genbank record and then biojava search for a new crossref in
database and it will try to persist the old one it get a hibernate
exception regarding violation of "unique constraint on dbxref_id"
column.
The only way to get these record in database is:
* The very easy solution and the way I did it for testing my
theory is Change the bioSql schema so that it can allow many
to one on relation between "reference" and "dbxref" table.
Which even make sense because one paper can have many
different variation of naming, and this change allow us to
store that info too. But this is something BioSql people
have decide and I don't know how to approach them.
* Second solution is slightly difficult to implement, is to
change the way "BioSqlRichObjectBuilder.buildObject(Class
clazz,List paramsList)" make decision about weather a
particular DocRef already exist in database or not. I am
mean testing all possible string variations of authors,
location, title of the docRef which we are searching. Which
does have many complications and may slow down process of
creating a richsequence object when link RichObjectFactory
with a active hibernate session.
Example:Below is a sample of what i have in my local biosql schema
which has modification suggested by me. (dbxref_id column have
Pubmed_id , I replaced the local dbxref_id which was present on
this table in my database with pubmed_id stored in "dbxref" table,
for easy reference with outside world)
Reference_id
Dbxref_id
Location
Title
Authors
crc
216
18554304
FEMS Microbiol. Ecol. 66 (3THEMATIC ISSUE: GUT MICROBIOLOGY),
528-536 (2008)
Isolation of lactate-utilizing butyrate-producing bacteria from
human feces and in vivo administration of Anaerostipes caccae
strain L2 and galacto-oligosaccharides in a rat model
Sato,T., Matsumoto,K., Okumura,T., Yokoi,W., Naito,E., Yoshida,Y.,
Nomoto,K., Ito,M. and Sawada,H.
9E940E01F4BE3CD0
230
18554304
FEMS Microbiol. Ecol. 66 (3), 528-536 (2008)
Isolation of lactate-utilizing butyrate-producing bacteria from
human feces and in vivo administration of Anaerostipes caccae
strain L2 and galacto-oligosaccharides in a rat model
Sato,T., Matsumoto,K., Okumura,T., Yokoi,W., Naito,E., Yoshida,Y.,
Nomoto,K., Ito,M. and Sawada,H.
D3BC0C17F3F786C9
415
16790744
Infect. Immun. 74 (7), 3715-3726 (2006)
Intrastrain Heterogeneity of the mgpB Gene in Mycoplasma
genitalium Is Extensive In Vitro and In Vivo and Suggests that
Variation Is Generated via Recombination with Repetitive
Chromosomal Sequences
Iverson-Cabral,S.L., Astete,S.G., Cohen,C.R., Rocha,E.P. and
Totten,P.A.
60AEDFA0CEEACC38
969
16790744
Infect. Immun. 74 (7), 3715-3726 (2006)
Intrastrain heterogeneity of the mgpB gene in mycoplasma
genitalium is extensive in vitro and in vivo and suggests that
variation is generated via recombination with repetitive
chromosomal sequences
Iverson-Cabral,S.L., Astete,S.G., Cohen,C.R., Rocha,E.P. and
Totten,P.A.
4B1232999F6E8130
929
8688087
Science 273 (5278), 1058-1073 (1996)
Complete genome sequence of the methanogenic archaeon,
Methanococcus jannaschii
Bult,C.J., White,O., Olsen,G.J., Zhou,L., Fleischmann,R.D.,
Sutton,G.G., Blake,J.A., FitzGerald,L.M., Clayton,R.A.,
Gocayne,J.D., Kerlavage,A.R., Dougherty,B.A., Tomb,J.-F.,
Adams,M.D., Reich,C.I., Overbeek,R., Kirkness,E.F.,
Weinstock,K.G., Merrick,J.M., Glodek,A., Scott,J.L.,
Geoghagen,N.S.M., Weidman,J.F., Fuhrmann,J.L., Presley,E.A.,
Nguyen,D., Utterback,T.R., Kelley,J.M., Peterson,J.D., Sadow,P.W.,
Hanna,M.C., Cotton,M.D., Hurst,M.A., Roberts,K.M., Kaine,B.P.,
Borodovsky,M., Klenk,H.-P., Fraser,C.M., Smith,H.O., Woese,C.R.
and Venter,J.C.
3E79B40DD2AAA2B7
932
8688087
Science 273 (5278), 1058-1073 (1996)
Complete genome sequence of the methanogenic archaeon,
Methanococcus jannaschii
Bult,C.J., White,O., Olsen,G.J., Zhou,L., Fleischmann,R.D.,
Sutton,G.G., Blake,J.A., FitzGerald,L.M., Clayton,R.A.,
Gocayne,J.D., Kerlavage,A.R., Dougherty,B.A., Tomb,J., Adams,M.D.,
Reich,C.I., Overbeek,R., Kirkness,E.F., Weinstock,K.G.,
Merrick,J.M., Glodek,A., Scott,J.D., Geoghagen,N.S., Weidman,J.F.,
Fuhrmann,J.L., Nguyen,D.T., Utterback,T., Kelley,J.M.,
Peterson,J.D., Sadow,P.W., Hanna,M.C., Cotton,M.D., Hurst,M.A.,
Roberts,K.M., Kaine,B.B., Borodovsky,M., Klenk,H.P., Fraser,C.M.,
Smith,H.O., Woese,C.R. and Venter,J.C.
094EB3384F8D6DE8
1426
10684935
Nucleic Acids Res. 28 (6), 1397-1406 (2000)
Genome sequences of Chlamydia trachomatis MoPn and Chlamydia
pneumoniae AR39
Read,T.D., Brunham,R.C., Shen,C., Gill,S.R., Heidelberg,J.F.,
White,O., Hickey,E.K., Peterson,J., Umayam,L.A., Utterback,T.,
Berry,K., Bass,S., Linher,K., Weidman,J., Khouri,H., Craven,B.,
Bowman,C., Dodson,R., Gwinn,M., Nelson,W., DeBoy,R., Kolonay,J.,
McClarty,G., Salzberg,S.L., Eisen,J. and Fraser,C.M.
357648D8FD8C6C8A
1481
10684935
Nucleic Acids Res. 28 (6), 1397-1406 (2000)
Genome sequences of Chlamydia trachomatis MoPn and Chlamydia
pneumoniae AR39
Read,T., Brunham,R., Shen,C., Gill,S., Heidelberg,J., White,O.,
Hickey,E., Peterson,J., Utterback,T., Berry,K., Bass,S.,
Linher,K., Weidman,J., Khouri,H., Craven,B., Bowman,C., Dodson,R.,
Gwinn,M., Nelson,W., DeBoy,R., Kolonay,J., McClarty,G.,
Salzberg,S., Eisen,J. and Fraser,C.
115411EB2DEE5654
1497
14689165
Arch. Microbiol. 181 (2), 144-154 (2004)
The effect of FITA mutations on the symbiotic properties of
Sinorhizobium fredii varies in a chromosomal-background-dependent
manner
Vinardell,J.M., Lopez-Baena,F.J., Hidalgo,A., Ollero,F.J.,
Bellogin,R., del Rosario Espuny,M., Temprano,F., Romero,F.,
Krishnan,H.B., Pueppke,S.G. and Ruiz-Sainz,J.E.
4D5D376EECCD186B
1501
14689165
Arch. Microbiol. 181 (2), 144-154 (2004)
The effect of FITA mutations on the symbiotic properties of
Sinorhizobium fredii varies in a chromosomal-background-dependent
manner
Vinardell,J.M., Lopez-Baena,F.J., Hidalgo,A., Ollero,F.J.,
Bellogin,R., Del Rosario Espuny,M., Temprano,F., Romero,F.,
Krishnan,H.B., Pueppke,S.G. and Ruiz-Sainz,J.E.
4D57954EECDED66B
1556
18060065
PLoS ONE 2 (12), E1271 (2007)
Analysis of the Neurotoxin Complex Genes in Clostridium botulinum
A1-A4 and B1 Strains: BoNT/A3, /Ba4 and /B1 Clusters Are Located
within Plasmids
Smith,T.J., Hill,K.K., Foley,B.T., Detter,J.C., Munk,A.C.,
Bruce,D.C., Doggett,N.A., Smith,L.A., Marks,J.D., Xie,G. and
Brettin,T.S.
698688FB6DB95247
1559
18060065
PLoS ONE 2 (12), E1271 (2007)
Analysis of the neurotoxin complex genes in Clostridium botulinum
A1-A4 and B1 strains: BoNT/A3, /Ba4 and /B1 clusters are located
within plasmids
Smith,T.J., Hill,K.K., Foley,B.T., Detter,J.C., Munk,C.A.,
Bruce,D.C., Doggett,N.A., Smith,L.A., Marks,J.D., Xie,G. and
Brettin,T.S.
E25E1BA99DB18F3D
2. The second kind of error which I got was :*
org.hibernate.PropertyValueException: not-null property references
a null or transient value: Location.feature*
* Which means in richsequence object some feature have
location object which have its feature set to null.
* My Observation:
o Usually occur when you try to persist a richsequence
object to database, and occur to those features which
have *CompoundRichLocation *usually "joins" and
"complement" in cds region of a genbank record
o After catching the hibernate exception I went through
all the features and either biojava or hibernate
changed the object type of a CompoundRichLocation to
SimpleRichLocation and set the feature variable to null.
o Below is the screen shot of one of my tests
+ Settings before trying to persits the
richsequence object to database
*
* After trying to persits the richsequence object to database
and got in hibernate exception catch
*
* So my question is why is this happening and how to stop or
how to get these record into database, I have no clue why is
this happening.
* Some extra information to make things more clear to you guys.
o Below are some Locus line from genbank record for
which I know the error of location, I mean the cds
region causing error, and array index in
richsequence.feature arrayList object.
1. LOCUS AE001439 1643831 bp DNA circular BCT
19-JAN-2006
+ richSequence.feature Index : 2540 and line
number in the genbank record : 22115
2. LOCUS CP001189 3887492 bp DNA circular BCT
16-OCT-2008
+ richSequence.feature Index : 127 and line
number in the genbank record : 2137
3. LOCUS CP001292 328635 bp DNA circular BCT
17-DEC-2008
+ richSequence.feature Index : 389 and line
number in the genbank record : 3632
4. LOCUS AM279694 238517 bp DNA linear BCT 23-OCT-2008
+ richSequence.feature Index : 47 and line
number in the genbank record : 4841
5. LOCUS CR931663 18517 bp DNA linear BCT 18-SEP-2008
+ richSequence.feature Index : 45 and line
number in the genbank record : 442
* The complete exception msg :
org.hibernate.PropertyValueException: not-null property references
a null or transient value: Location.feature
at
org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
at
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
at
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at
org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
at
org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at
org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
at
org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456)
at
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334)
at
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at
org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
at
org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at
org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
at
org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456)
at
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334)
at
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at
trashtesting.GenBankLoaderTesting.main(GenBankLoaderTesting.java:78)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.open-bio.org/pipermail/biojava-l/attachments/20100203/f10d2617/attachment-0002.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: moz-screenshot.png
Type: image/png
Size: 35664 bytes
Desc: not available
URL: <http://lists.open-bio.org/pipermail/biojava-l/attachments/20100203/f10d2617/attachment-0004.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: moz-screenshot-1.png
Type: image/png
Size: 102659 bytes
Desc: not available
URL: <http://lists.open-bio.org/pipermail/biojava-l/attachments/20100203/f10d2617/attachment-0005.png>
More information about the Biojava-l
mailing list