From darin.london at duke.edu Mon May 5 10:08:19 2008 From: darin.london at duke.edu (darin.london at duke.edu) Date: Mon, 5 May 2008 10:08:19 -0400 Subject: [BioSQL-l] BOSC 2008 Announcement and Call For Submissions Message-ID: <200805051408.m45E8JIl023449@tenero.duhs.duke.edu> BOSC 2008 Call for Abstracts Reminder The 9th annual Bioinformatics Open Source Conference (BOSC 2008) will take place in Toronto, Ontario, Canada, as one of several Special Interest Group (SIG) meetings occurring in conjunction with the 16th annual Intelligent Systems for Molecular Biology Conference (ISMB 2008). This is the final reminder to submit your proposals for talks to the BOSC submission system before May 11. Submission Process: All abstracts must be submitted through our Open Conference Systems site (http://events.open-bio.org/BOSC2008/openconf.php). The form will ask for a small Abstract Text to be pasted into it, and a full paper. The small Abstract text should be a summary, while the longer abstract (should provide more details, including the open-source license requirement details) Full-length abstracts are limited to one page with one inch (2.5 cm) margins on the top, sides, and bottom. The full-length abstract should include the title, authors, and affiliations. We prefer your abstract to be in PDF format, although plain t Important Dates: May 11: Abstract submission deadline. June 2: Notification of accepted talks. June 4: Early registration discount cut-off. July 18-19: BOSC 2008! We hope to see you at BOSC 2008! Kam Dahlquist and Darin London BOSC 2008 Co-organizers From biopython at maubp.freeserve.co.uk Wed May 7 06:04:34 2008 From: biopython at maubp.freeserve.co.uk (Peter) Date: Wed, 7 May 2008 11:04:34 +0100 Subject: [BioSQL-l] MySQL schema, CREATE TABLE and TYPE verus ENGINE Message-ID: <320fb6e00805070304g21c681dbkbaf7411a5c9985c6@mail.gmail.com> Hello all, I've just been running the Biopython BioSQL unit tests on a "new" Linux machine with MySQL 5.0, $ mysql --version mysql Ver 14.12 Distrib 5.0.27, for redhat-linux-gnu (i686) using readline 5.0 Part of the unit test creats a new empty database and loads the schema file biosqldb-mysql.sql into it. This triggers a warning: Warning: 'TYPE=storage_engine' is deprecated; use 'ENGINE=storage_engine' instead My guess is the commands "CREATE TABLE ... TYPE=INNODB;" be updated to "CREATE TABLE ... ENGINE=INNODB;" in biosqldb-mysql.sql to get rid of the warning. According to the following documents, MySQL 4.1 and 5.0 will accept either TYPE or ENGINE, but it looks like MySQL 6.0 insists on using ENGINE. http://dev.mysql.com/doc/refman/4.1/en/create-table.html http://dev.mysql.com/doc/refman/5.0/en/create-table.html http://dev.mysql.com/doc/refman/6.0/en/create-table.html Is this something which should be fixed in BioSQL? Thanks Peter From hlapp at gmx.net Thu May 8 00:22:03 2008 From: hlapp at gmx.net (Hilmar Lapp) Date: Wed, 7 May 2008 22:22:03 -0600 Subject: [BioSQL-l] MySQL schema, CREATE TABLE and TYPE verus ENGINE In-Reply-To: <320fb6e00805070304g21c681dbkbaf7411a5c9985c6@mail.gmail.com> References: <320fb6e00805070304g21c681dbkbaf7411a5c9985c6@mail.gmail.com> Message-ID: <3F9E5C22-1FFD-4C80-A4B5-F6CAF7DA05B5@gmx.net> On May 7, 2008, at 4:04 AM, Peter wrote: > According to the following documents, MySQL 4.1 and 5.0 will accept > either TYPE or ENGINE, but it looks like MySQL 6.0 insists on using > ENGINE. > > http://dev.mysql.com/doc/refman/4.1/en/create-table.html > http://dev.mysql.com/doc/refman/5.0/en/create-table.html > http://dev.mysql.com/doc/refman/6.0/en/create-table.html > > Is this something which should be fixed in BioSQL? Sounds like this would not break compatibility for >= 4.1, but would for at least for 3.x. (Not sure about 4.0.x here.) Is anyone still using MySQL with a version < 4.0? -hilmar -- =========================================================== : Hilmar Lapp -:- Durham, NC -:- hlapp at gmx dot net : =========================================================== From hlapp at gmx.net Thu May 8 00:45:38 2008 From: hlapp at gmx.net (Hilmar Lapp) Date: Wed, 7 May 2008 22:45:38 -0600 Subject: [BioSQL-l] Problem when trying to persist GO in BioSQL In-Reply-To: <4821C37D.7050105@uni-tuebingen.de> References: <4821C37D.7050105@uni-tuebingen.de> Message-ID: This is odd - it would mean that you don't have the obo.pm parser, or that it can't be loaded. Maybe there is some kind of version mix going on here? Could you check that you have the file Bio/OntologyIO/obo.pm in the directory where you've installed BioPerl? If yes, can you do $ perl -MBio::OntologyIO::obo and let me know what happens? -hilmar On May 7, 2008, at 8:58 AM, Andreas Dr?ger wrote: > Dear all, > > Unfortunately, I am still having trouble while loading the Gene > Ontology into my BioSQL database. I installed BioSQL, downloaded > the file gene_ontology_edit.obo from the Gene Ontology homepage > (http://www.geneontology.org/GO.downloads.ontology.shtml), > installed the BioPerl package bioperl-db-1.5.2_100 as described in > the INSTALL file and tried the following: > > ./scripts/biosql/load_ontology.pl \ > --host localhost --dbname biosql \ > --dbuser myUser \ > --dbpass 'myPassword' \ > --driver mysql \ > --namespace "Gene Ontology" \ > --format obo \ > gene_ontology_edit.obo > > I received the following error message: > > Bio::OntologyIO: obo cannot be found > Exception > ------------- EXCEPTION ------------- > MSG: Failed to load module Bio::OntologyIO::obo. Can't locate Bio/ > OntologyIO/obo.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/ > 5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386- > linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread- > multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/ > lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/ > perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/ > site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi / > usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/ > perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/ > vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/ > vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/ > vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/ > vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/ > perl5/5.8.8 .) at /usr/lib/perl5/site_perl/5.8.8/Bio/Root/Root.pm > line 394. > > STACK Bio::Root::Root::_load_module /usr/lib/perl5/site_perl/5.8.8/ > Bio/Root/Root.pm:396 > STACK (eval) /usr/lib/perl5/site_perl/5.8.8/Bio/OntologyIO.pm:255 > STACK Bio::OntologyIO::_load_format_module /usr/lib/perl5/site_perl/ > 5.8.8/Bio/OntologyIO.pm:254 > STACK Bio::OntologyIO::new /usr/lib/perl5/site_perl/5.8.8/Bio/ > OntologyIO.pm:165 > STACK toplevel ./scripts/biosql/load_ontology.pl:525 > > -------------------------------------- > > For more information about the OntologyIO system please see the docs. > This includes ways of checking for formats at compile time, not run > time > Can't call method "term_factory" on an undefined value at ./scripts/ > biosql/load_ontology.pl line 531. > [root at u-172-c052 bioperl-db-1.5.2_100]# vim scripts/biosql/ > load_ontology.pl > > > I am grateful for any hint what I can do to solve this problem and > to store the GO in my database. > > Cheers, > Andreas -- =========================================================== : Hilmar Lapp -:- Durham, NC -:- hlapp at gmx dot net : =========================================================== From hlapp at gmx.net Thu May 8 16:24:01 2008 From: hlapp at gmx.net (Hilmar Lapp) Date: Thu, 8 May 2008 14:24:01 -0600 Subject: [BioSQL-l] Problem when trying to persist GO in BioSQL In-Reply-To: <4822BF3A.2020305@uni-tuebingen.de> References: <4821C37D.7050105@uni-tuebingen.de> <4822BF3A.2020305@uni-tuebingen.de> Message-ID: <5D34FC99-AAC1-4EF5-AD79-4F152D12A391@gmx.net> Hi Andreas - it seems that the GO download you have has two terms with name 'invasive growth', which are both obsoleted, but have different GO IDs. That's a somewhat nasty situation and happens occasionally (ask the GO people if you want to know more on why exactly that's necessary). If you're loading the ontology fresh into your database you can avoid all that by simply leaving all obsolete terms outside using the -- noobsolete switch. There are other options for handling obsolete terms (see the script's POD) that should allow you to stay out of that trouble for updates too. -hilmar On May 8, 2008, at 2:52 AM, Andreas Dr?ger wrote: > Dear all, > > Thank you for your advice! Now it works, but not completely. It > seems that there is either a problem with the ontology file I > downloaded from GO (gene_ontology_edit.obo) or an error in the script: > > ./scripts/biosql/load_ontology.pl --host localhost --dbname > bioseqdb --dbuser myUser --dbpass 'myPasswd' --driver mysql -- > namespace "Gene Ontology" --format obo gene_ontology_edit.obo > > > > And it works: > > > > Loading ontology gene_ontology: > ... terms > ... relationships > Done with gene_ontology. > Loading ontology biological_process: > ... terms > > > > But then I receive the following messages: > > > > -------------------- WARNING --------------------- > MSG: insert in Bio::DB::BioSQL::TermAdaptor (driver) failed, values > were ("GO:0007125","invasive growth","OBSOLETE (was not defined > before being made obsolete).","X","") FKs (46) > Duplicate entry 'invasive growth-46-X' for key 3 > --------------------------------------------------- > Could not store term GO:0007125, name 'invasive growth': > > ------------- EXCEPTION: Bio::Root::Exception ------------- > MSG: create: object (Bio::Ontology::OBOterm) failed to insert or to > be found by unique key > STACK: Error::throw > STACK: Bio::Root::Root::throw /usr/lib/perl5/site_perl/5.8.8/Bio/ > Root/Root.pm:359 > STACK: Bio::DB::BioSQL::BasePersistenceAdaptor::create /usr/lib/ > perl5/site_perl/5.8.8/Bio/DB/BioSQL/BasePersistenceAdaptor.pm:206 > STACK: Bio::DB::BioSQL::BasePersistenceAdaptor::store /usr/lib/ > perl5/site_perl/5.8.8/Bio/DB/BioSQL/BasePersistenceAdaptor.pm:251 > STACK: Bio::DB::Persistent::PersistentObject::store /usr/lib/perl5/ > site_perl/5.8.8/Bio/DB/Persistent/PersistentObject.pm:271 > STACK: main::persist_term ./scripts/biosql/load_ontology.pl:802 > STACK: ./scripts/biosql/load_ontology.pl:607 > ----------------------------------------------------------- > > at ./scripts/biosql/load_ontology.pl line 814 > main::persist_term('-term', 'Bio::Ontology::OBOterm=HASH > (0xa1b502c)', '-db', 'Bio::DB::BioSQL::DBAdaptor=HASH(0x8ba793c)', > '-termfactory', 'undef', '-throw', 'CODE(0x87406d8)', '- > mergeobs', ...) called at ./scripts/biosql/load_ontology.pl line 607 -- =========================================================== : Hilmar Lapp -:- Durham, NC -:- hlapp at gmx dot net : =========================================================== From andreas.draeger at uni-tuebingen.de Wed May 7 09:29:18 2008 From: andreas.draeger at uni-tuebingen.de (=?ISO-8859-1?Q?Andreas_Dr=E4ger?=) Date: Wed, 07 May 2008 15:29:18 +0200 Subject: [BioSQL-l] Problem when trying to persist GO in BioSQL Message-ID: <4821AEAE.5010205@uni-tuebingen.de> Dear all, Unfortunately, I am still having trouble while loading the Gene Ontology into my BioSQL database. I installed BioSQL, downloaded the file gene_ontology_edit.obo from the Gene Ontology homepage (http://www.geneontology.org/GO.downloads.ontology.shtml), installed the BioPerl package bioperl-db-1.5.2_100 as described in the INSTALL file and tried the following: ./scripts/biosql/load_ontology.pl \ --host localhost --dbname biosql \ --dbuser myUser \ --dbpass 'myPassword' \ --driver mysql \ --namespace "Gene Ontology" \ --format obo \ gene_ontology_edit.obo I received the following error message: Bio::OntologyIO: obo cannot be found Exception ------------- EXCEPTION ------------- MSG: Failed to load module Bio::OntologyIO::obo. Can't locate Bio/OntologyIO/obo.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/lib/perl5/site_perl/5.8.8/Bio/Root/Root.pm line 394. STACK Bio::Root::Root::_load_module /usr/lib/perl5/site_perl/5.8.8/Bio/Root/Root.pm:396 STACK (eval) /usr/lib/perl5/site_perl/5.8.8/Bio/OntologyIO.pm:255 STACK Bio::OntologyIO::_load_format_module /usr/lib/perl5/site_perl/5.8.8/Bio/OntologyIO.pm:254 STACK Bio::OntologyIO::new /usr/lib/perl5/site_perl/5.8.8/Bio/OntologyIO.pm:165 STACK toplevel ./scripts/biosql/load_ontology.pl:525 -------------------------------------- For more information about the OntologyIO system please see the docs. This includes ways of checking for formats at compile time, not run time Can't call method "term_factory" on an undefined value at ./scripts/biosql/load_ontology.pl line 531. [root at u-172-c052 bioperl-db-1.5.2_100]# vim scripts/biosql/load_ontology.pl I am grateful for any hint what I can do to solve this problem and to store the GO in my database. Cheers, Andreas From andreas.draeger at uni-tuebingen.de Wed May 7 10:58:05 2008 From: andreas.draeger at uni-tuebingen.de (=?ISO-8859-1?Q?Andreas_Dr=E4ger?=) Date: Wed, 07 May 2008 16:58:05 +0200 Subject: [BioSQL-l] Problem when trying to persist GO in BioSQL Message-ID: <4821C37D.7050105@uni-tuebingen.de> Dear all, Unfortunately, I am still having trouble while loading the Gene Ontology into my BioSQL database. I installed BioSQL, downloaded the file gene_ontology_edit.obo from the Gene Ontology homepage (http://www.geneontology.org/GO.downloads.ontology.shtml), installed the BioPerl package bioperl-db-1.5.2_100 as described in the INSTALL file and tried the following: ./scripts/biosql/load_ontology.pl \ --host localhost --dbname biosql \ --dbuser myUser \ --dbpass 'myPassword' \ --driver mysql \ --namespace "Gene Ontology" \ --format obo \ gene_ontology_edit.obo I received the following error message: Bio::OntologyIO: obo cannot be found Exception ------------- EXCEPTION ------------- MSG: Failed to load module Bio::OntologyIO::obo. Can't locate Bio/OntologyIO/obo.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/lib/perl5/site_perl/5.8.8/Bio/Root/Root.pm line 394. STACK Bio::Root::Root::_load_module /usr/lib/perl5/site_perl/5.8.8/Bio/Root/Root.pm:396 STACK (eval) /usr/lib/perl5/site_perl/5.8.8/Bio/OntologyIO.pm:255 STACK Bio::OntologyIO::_load_format_module /usr/lib/perl5/site_perl/5.8.8/Bio/OntologyIO.pm:254 STACK Bio::OntologyIO::new /usr/lib/perl5/site_perl/5.8.8/Bio/OntologyIO.pm:165 STACK toplevel ./scripts/biosql/load_ontology.pl:525 -------------------------------------- For more information about the OntologyIO system please see the docs. This includes ways of checking for formats at compile time, not run time Can't call method "term_factory" on an undefined value at ./scripts/biosql/load_ontology.pl line 531. [root at u-172-c052 bioperl-db-1.5.2_100]# vim scripts/biosql/load_ontology.pl I am grateful for any hint what I can do to solve this problem and to store the GO in my database. Cheers, Andreas From andreas.draeger at uni-tuebingen.de Thu May 8 04:52:10 2008 From: andreas.draeger at uni-tuebingen.de (=?ISO-8859-1?Q?Andreas_Dr=E4ger?=) Date: Thu, 08 May 2008 10:52:10 +0200 Subject: [BioSQL-l] Problem when trying to persist GO in BioSQL In-Reply-To: References: <4821C37D.7050105@uni-tuebingen.de> Message-ID: <4822BF3A.2020305@uni-tuebingen.de> Dear all, Thank you for your advice! Now it works, but not completely. It seems that there is either a problem with the ontology file I downloaded from GO (gene_ontology_edit.obo) or an error in the script: ./scripts/biosql/load_ontology.pl --host localhost --dbname bioseqdb --dbuser myUser --dbpass 'myPasswd' --driver mysql --namespace "Gene Ontology" --format obo gene_ontology_edit.obo And it works: Loading ontology gene_ontology: ... terms ... relationships Done with gene_ontology. Loading ontology biological_process: ... terms But then I receive the following messages: -------------------- WARNING --------------------- MSG: insert in Bio::DB::BioSQL::TermAdaptor (driver) failed, values were ("GO:0007125","invasive growth","OBSOLETE (was not defined before being made obsolete).","X","") FKs (46) Duplicate entry 'invasive growth-46-X' for key 3 --------------------------------------------------- Could not store term GO:0007125, name 'invasive growth': ------------- EXCEPTION: Bio::Root::Exception ------------- MSG: create: object (Bio::Ontology::OBOterm) failed to insert or to be found by unique key STACK: Error::throw STACK: Bio::Root::Root::throw /usr/lib/perl5/site_perl/5.8.8/Bio/Root/Root.pm:359 STACK: Bio::DB::BioSQL::BasePersistenceAdaptor::create /usr/lib/perl5/site_perl/5.8.8/Bio/DB/BioSQL/BasePersistenceAdaptor.pm:206 STACK: Bio::DB::BioSQL::BasePersistenceAdaptor::store /usr/lib/perl5/site_perl/5.8.8/Bio/DB/BioSQL/BasePersistenceAdaptor.pm:251 STACK: Bio::DB::Persistent::PersistentObject::store /usr/lib/perl5/site_perl/5.8.8/Bio/DB/Persistent/PersistentObject.pm:271 STACK: main::persist_term ./scripts/biosql/load_ontology.pl:802 STACK: ./scripts/biosql/load_ontology.pl:607 ----------------------------------------------------------- at ./scripts/biosql/load_ontology.pl line 814 main::persist_term('-term', 'Bio::Ontology::OBOterm=HASH(0xa1b502c)', '-db', 'Bio::DB::BioSQL::DBAdaptor=HASH(0x8ba793c)', '-termfactory', 'undef', '-throw', 'CODE(0x87406d8)', '-mergeobs', ...) called at ./scripts/biosql/load_ontology.pl line 607 From gwu at molbio.mgh.harvard.edu Tue May 20 14:03:35 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Tue, 20 May 2008 14:03:35 -0400 Subject: [BioSQL-l] Load/Update Genbank sequence issue Message-ID: <48331277.7060105@molbio.mgh.harvard.edu> Hi all, I'm trying to load Genbank sequence into BioSQL database with BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the exception when loading new sequences or reloading the same sequence. Seems the Hibernate is trying to insert "genbank" namespace again. Can anybody tell me what I did wrong? Thanks in advance. Gang ================================================================ public class SequenceLoaderNew { public void loadSeq(String fileName, String namespace) throws FileNotFoundException, BioException { System.out.println("Start loading file " + fileName + " at " + System.currentTimeMillis()); BufferedReader br = new BufferedReader(new FileReader(fileName)); Session session = new Configuration().configure().buildSessionFactory().openSession(); RichObjectFactory.connectToBioSQL(session); RichSequenceDB db = new BioSQLRichSequenceDB(session); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new SimpleNamespace(namespace)); while (rsi.hasNext()) { Transaction tx = session.beginTransaction(); RichSequence sequence = rsi.nextRichSequence(); System.out.println("Loaded sequence" + sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); try { System.out.println("Delete sequence" + sequence.getAccession() + " if exists."); db.removeSequence(sequence.getAccession()); } catch (Exception ex) { } try { System.out.println("Save sequence " + sequence.getAccession()); session.save("BioEntry", sequence); tx.commit(); session.flush(); session.clear(); } catch (HibernateException ex) { tx.rollback(); ex.printStackTrace(); } } } public static void main(String[] args) throws BioException, FileNotFoundException { SequenceLoaderNew sl = new SequenceLoaderNew(); //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); } } ================================================================ org.hibernate.exception.ConstraintViolationException: could not insert: [Namespace] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) 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.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) 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 primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry 'genbank' for key 'name' at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) ... 31 more ================================================================ From gwu at molbio.mgh.harvard.edu Tue May 20 14:37:18 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Tue, 20 May 2008 14:37:18 -0400 Subject: [BioSQL-l] Load, Update Genbank sequence issue Message-ID: <48331A5E.9020908@molbio.mgh.harvard.edu> Hi all, I'm trying to load Genbank sequence into BioSQL database with BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the exception when loading new sequences or reloading the same sequence. Seems the Hibernate is trying to insert "genbank" namespace again. Can anybody tell me what I did wrong? Thanks in advance. Gang ================================================================ public class SequenceLoaderNew { public void loadSeq(String fileName, String namespace) throws FileNotFoundException, BioException { System.out.println("Start loading file " + fileName + " at " + System.currentTimeMillis()); BufferedReader br = new BufferedReader(new FileReader(fileName)); Session session = new Configuration().configure().buildSessionFactory().openSession(); RichObjectFactory.connectToBioSQL(session); RichSequenceDB db = new BioSQLRichSequenceDB(session); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new SimpleNamespace(namespace)); while (rsi.hasNext()) { Transaction tx = session.beginTransaction(); RichSequence sequence = rsi.nextRichSequence(); System.out.println("Loaded sequence" + sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); try { System.out.println("Delete sequence" + sequence.getAccession() + " if exists."); db.removeSequence(sequence.getAccession()); } catch (Exception ex) { } try { System.out.println("Save sequence " + sequence.getAccession()); session.save("BioEntry", sequence); tx.commit(); session.flush(); session.clear(); } catch (HibernateException ex) { tx.rollback(); ex.printStackTrace(); } } } public static void main(String[] args) throws BioException, FileNotFoundException { SequenceLoaderNew sl = new SequenceLoaderNew(); //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); } } ================================================================ org.hibernate.exception.ConstraintViolationException: could not insert: [Namespace] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) 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.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) 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 primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry 'genbank' for key 'name' at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) ... 31 more ================================================================ From dicknetherlands at gmail.com Tue May 20 14:44:09 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Tue, 20 May 2008 19:44:09 +0100 Subject: [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> Message-ID: Forgot to copy my reply back to the lists! ---------- Forwarded message ---------- From: Richard Holland Date: 2008/5/20 Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue To: gang wu You need to substitute this line: RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new SimpleNamespace(namespace)); with this line: Namespace ns = (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new Object[]{namespace}); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); cheers, Richard PS. You're the second person who has quoted this section of code on this list recently, and had the same problem with it. If you got it from a website somewhere, could you send me the URL so I can get in touch with the authors and get them to correct it? Thanks! 2008/5/20 gang wu : > Hi all, > > I'm trying to load Genbank sequence into BioSQL database with > BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the > exception when loading new sequences or reloading the same sequence. Seems > the Hibernate is trying to insert "genbank" namespace again. Can anybody > tell me what I did wrong? Thanks in advance. > > Gang > > ================================================================ > public class SequenceLoaderNew { > public void loadSeq(String fileName, String namespace) throws > FileNotFoundException, BioException { > System.out.println("Start loading file " + fileName + " at " + > System.currentTimeMillis()); > BufferedReader br = new BufferedReader(new FileReader(fileName)); > Session session = new > Configuration().configure().buildSessionFactory().openSession(); > RichObjectFactory.connectToBioSQL(session); > RichSequenceDB db = new BioSQLRichSequenceDB(session); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new > SimpleNamespace(namespace)); > while (rsi.hasNext()) { > Transaction tx = session.beginTransaction(); > RichSequence sequence = rsi.nextRichSequence(); > System.out.println("Loaded sequence" + sequence.getAccession() + > ", identifier: " + sequence.getIdentifier()); > try { > System.out.println("Delete sequence" + sequence.getAccession() > + " if exists."); > db.removeSequence(sequence.getAccession()); > } catch (Exception ex) { > } > try { > System.out.println("Save sequence " + > sequence.getAccession()); > session.save("BioEntry", sequence); > tx.commit(); > session.flush(); > session.clear(); > } catch (HibernateException ex) { > tx.rollback(); > ex.printStackTrace(); > } > } > } > > public static void main(String[] args) throws BioException, > FileNotFoundException { > SequenceLoaderNew sl = new SequenceLoaderNew(); > //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); > } > } > ================================================================ > org.hibernate.exception.ConstraintViolationException: could not insert: > [Namespace] > at > org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) > at > org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) > at > org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) > at > org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) > at > org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) > at > org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) > at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > 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.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > 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 primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) > at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) > Caused by: > com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: > Duplicate entry 'genbank' for key 'name' > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) > at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) > at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) > at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) > at > com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) > at > org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) > at > org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) > ... 31 more > ================================================================ > > _______________________________________________ > BioSQL-l mailing list > BioSQL-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biosql-l > From gwu at molbio.mgh.harvard.edu Wed May 21 02:28:16 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Wed, 21 May 2008 02:28:16 -0400 Subject: [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> Message-ID: <4833C100.7040304@molbio.mgh.harvard.edu> I got another problem with almost the same code(see attached code and output). If I call the loadSeq() only once, everything works fine. The second call of the same method will fail. By the exception message, it looks like the session is not cleaned up yet though at the end of the method the session has been flush/clear/closed. Anything wrong? Or does anyone have a sequence data loader would like to share? I'm quite frustrated after keeping trying to do this seems simple thing without success. If I can make it work, I'd like to post it on the mailing list. Thanks in advance. Gang ==================================================== public class SequenceLoaderNew { public void loadSeq(String fileName, String namespace) throws FileNotFoundException, BioException, SQLException, InterruptedException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); RichObjectFactory.connectToBioSQL(session); Namespace ns = (Namespace) RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); RichSequenceDB db = new BioSQLRichSequenceDB(session); System.out.println("Start loading file " + fileName + " at " + System.currentTimeMillis()); BufferedReader br = new BufferedReader(new FileReader(fileName)); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); try { while (rsi.hasNext()) { RichSequence sequence = rsi.nextRichSequence(); System.out.println("Loaded sequence" + sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); Transaction tx = session.beginTransaction(); try { System.out.println("Delete sequence" + sequence.getAccession() + " if exists."); db.removeSequence(sequence.getAccession()); tx.commit(); session.flush(); session.clear(); } catch (Exception ex) { if (tx != null) { tx.rollback(); } } try { tx = session.beginTransaction(); System.out.println("Save sequence " + sequence.getAccession()); //session.save("BioEntry", sequence); //db.addSequence(sequence); db.addRichSequence(sequence); tx.commit(); System.out.println("Finished savig sequence " + sequence.getAccession() + "\n"); } catch (HibernateException ex) { tx.rollback(); ex.printStackTrace(); } } } finally { session.flush(); session.clear(); session.close(); } } public static void main(String[] args) throws BioException, FileNotFoundException, InterruptedException, SQLException { SequenceLoaderNew sl = new SequenceLoaderNew(); sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); } } ==================================================== Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 Loaded sequenceNC_005813, identifier: 45478502 Delete sequenceNC_005813 if exists. Save sequence NC_005813 Finished savig sequence NC_005813 Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 Loaded sequenceNC_005813, identifier: 45478502 Delete sequenceNC_005813 if exists. Save sequence NC_005813 org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [Term#20] at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) 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.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) 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:107) 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 primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) Exception in thread "main" org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [Term#19] at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) 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.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) 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.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) ==================================================== Richard Holland wrote: > Forgot to copy my reply back to the lists! > > > ---------- Forwarded message ---------- > From: Richard Holland > Date: 2008/5/20 > Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue > To: gang wu > > > You need to substitute this line: > > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new > SimpleNamespace(namespace)); > > with this line: > > Namespace ns = (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new > Object[]{namespace}); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); > > cheers, > Richard > > PS. You're the second person who has quoted this section of code on > this list recently, and had the same problem with it. If you got it > from a website somewhere, could you send me the URL so I can get in > touch with the authors and get them to correct it? Thanks! > > 2008/5/20 gang wu : > >> Hi all, >> >> I'm trying to load Genbank sequence into BioSQL database with >> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >> exception when loading new sequences or reloading the same sequence. Seems >> the Hibernate is trying to insert "genbank" namespace again. Can anybody >> tell me what I did wrong? Thanks in advance. >> >> Gang >> >> ================================================================ >> public class SequenceLoaderNew { >> public void loadSeq(String fileName, String namespace) throws >> FileNotFoundException, BioException { >> System.out.println("Start loading file " + fileName + " at " + >> System.currentTimeMillis()); >> BufferedReader br = new BufferedReader(new FileReader(fileName)); >> Session session = new >> Configuration().configure().buildSessionFactory().openSession(); >> RichObjectFactory.connectToBioSQL(session); >> RichSequenceDB db = new BioSQLRichSequenceDB(session); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >> SimpleNamespace(namespace)); >> while (rsi.hasNext()) { >> Transaction tx = session.beginTransaction(); >> RichSequence sequence = rsi.nextRichSequence(); >> System.out.println("Loaded sequence" + sequence.getAccession() + >> ", identifier: " + sequence.getIdentifier()); >> try { >> System.out.println("Delete sequence" + sequence.getAccession() >> + " if exists."); >> db.removeSequence(sequence.getAccession()); >> } catch (Exception ex) { >> } >> try { >> System.out.println("Save sequence " + >> sequence.getAccession()); >> session.save("BioEntry", sequence); >> tx.commit(); >> session.flush(); >> session.clear(); >> } catch (HibernateException ex) { >> tx.rollback(); >> ex.printStackTrace(); >> } >> } >> } >> >> public static void main(String[] args) throws BioException, >> FileNotFoundException { >> SequenceLoaderNew sl = new SequenceLoaderNew(); >> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >> } >> } >> ================================================================ >> org.hibernate.exception.ConstraintViolationException: could not insert: >> [Namespace] >> at >> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >> at >> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >> at >> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >> at >> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >> at >> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >> at >> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> 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.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> 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 primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >> Caused by: >> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >> Duplicate entry 'genbank' for key 'name' >> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >> at >> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >> at >> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >> at >> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >> at >> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >> at >> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >> at >> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >> ... 31 more >> ================================================================ >> >> _______________________________________________ >> BioSQL-l mailing list >> BioSQL-l at lists.open-bio.org >> http://lists.open-bio.org/mailman/listinfo/biosql-l >> >> From dicknetherlands at gmail.com Wed May 21 13:17:39 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Wed, 21 May 2008 18:17:39 +0100 Subject: [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <4833C100.7040304@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: I'm not sure why you'd want to do that? Either way, as far as I know, Hibernate sessions are not designed for that. If you want to delete the sequence then replace it with a completely new sequence object, you have to create a new sequence object - you can't reuse the one you just deleted. The session info is embedded into that object so even if you clear the session, the object still refers to it. If you just want to load a sequence, modify it, then save it back, you should just load it then use saveOrUpdate to save it back again with changes. If you want to replace objects in your database, don't load them, just delete them, then use save to create new objects in their place. cheers, Richard 2008/5/21 gang wu : > I got another problem with almost the same code(see attached code and > output). If I call the loadSeq() only once, everything works fine. The > second call of the same method will fail. By the exception message, it looks > like the session is not cleaned up yet though at the end of the method the > session has been flush/clear/closed. Anything wrong? > > Or does anyone have a sequence data loader would like to share? I'm quite > frustrated after keeping trying to do this seems simple thing without > success. If I can make it work, I'd like to post it on the mailing list. > Thanks in advance. > > Gang > > ==================================================== > public class SequenceLoaderNew { > public void loadSeq(String fileName, String namespace) throws > FileNotFoundException, BioException, SQLException, InterruptedException { > SessionFactory sessionFactory = new > Configuration().configure().buildSessionFactory(); > Session session = sessionFactory.openSession(); > RichObjectFactory.connectToBioSQL(session); > Namespace ns = (Namespace) > RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); > RichSequenceDB db = new BioSQLRichSequenceDB(session); > System.out.println("Start loading file " + fileName + " at " + > System.currentTimeMillis()); > BufferedReader br = new BufferedReader(new FileReader(fileName)); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, > ns); > try { > while (rsi.hasNext()) { > RichSequence sequence = rsi.nextRichSequence(); > System.out.println("Loaded sequence" + sequence.getAccession() > + ", identifier: " + sequence.getIdentifier()); > Transaction tx = session.beginTransaction(); > try { > System.out.println("Delete sequence" + > sequence.getAccession() + " if exists."); > db.removeSequence(sequence.getAccession()); > tx.commit(); > session.flush(); > session.clear(); > } catch (Exception ex) { > if (tx != null) { > tx.rollback(); > } > } > try { > tx = session.beginTransaction(); > System.out.println("Save sequence " + > sequence.getAccession()); > //session.save("BioEntry", sequence); > //db.addSequence(sequence); > db.addRichSequence(sequence); > tx.commit(); > System.out.println("Finished savig sequence " + > sequence.getAccession() + "\n"); > } catch (HibernateException ex) { > tx.rollback(); > ex.printStackTrace(); > } > } > } finally { > session.flush(); > session.clear(); > session.close(); > } > } > > public static void main(String[] args) throws BioException, > FileNotFoundException, InterruptedException, SQLException { > SequenceLoaderNew sl = new SequenceLoaderNew(); > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > } > } > ==================================================== > Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 > Loaded sequenceNC_005813, identifier: 45478502 > Delete sequenceNC_005813 if exists. > Save sequence NC_005813 > Finished savig sequence NC_005813 > > Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 > Loaded sequenceNC_005813, identifier: 45478502 > Delete sequenceNC_005813 if exists. > Save sequence NC_005813 > org.hibernate.NonUniqueObjectException: a different object with the same > identifier value was already associated with the session: [Term#20] > at > org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) > 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.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > 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:107) > 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 primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) > at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) > Exception in thread "main" org.hibernate.NonUniqueObjectException: a > different object with the same identifier value was already associated with > the session: [Term#19] > at > org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) > 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.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > 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.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) > at > org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) > at > org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) > at > org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) > at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) > at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) > at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) > ==================================================== > > Richard Holland wrote: >> >> Forgot to copy my reply back to the lists! >> >> >> ---------- Forwarded message ---------- >> From: Richard Holland >> Date: 2008/5/20 >> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >> To: gang wu >> >> >> You need to substitute this line: >> >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >> SimpleNamespace(namespace)); >> >> with this line: >> >> Namespace ns = >> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >> Object[]{namespace}); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); >> >> cheers, >> Richard >> >> PS. You're the second person who has quoted this section of code on >> this list recently, and had the same problem with it. If you got it >> from a website somewhere, could you send me the URL so I can get in >> touch with the authors and get them to correct it? Thanks! >> >> 2008/5/20 gang wu : >> >>> >>> Hi all, >>> >>> I'm trying to load Genbank sequence into BioSQL database with >>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >>> exception when loading new sequences or reloading the same sequence. >>> Seems >>> the Hibernate is trying to insert "genbank" namespace again. Can anybody >>> tell me what I did wrong? Thanks in advance. >>> >>> Gang >>> >>> ================================================================ >>> public class SequenceLoaderNew { >>> public void loadSeq(String fileName, String namespace) throws >>> FileNotFoundException, BioException { >>> System.out.println("Start loading file " + fileName + " at " + >>> System.currentTimeMillis()); >>> BufferedReader br = new BufferedReader(new FileReader(fileName)); >>> Session session = new >>> Configuration().configure().buildSessionFactory().openSession(); >>> RichObjectFactory.connectToBioSQL(session); >>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >>> new >>> SimpleNamespace(namespace)); >>> while (rsi.hasNext()) { >>> Transaction tx = session.beginTransaction(); >>> RichSequence sequence = rsi.nextRichSequence(); >>> System.out.println("Loaded sequence" + sequence.getAccession() + >>> ", identifier: " + sequence.getIdentifier()); >>> try { >>> System.out.println("Delete sequence" + >>> sequence.getAccession() >>> + " if exists."); >>> db.removeSequence(sequence.getAccession()); >>> } catch (Exception ex) { >>> } >>> try { >>> System.out.println("Save sequence " + >>> sequence.getAccession()); >>> session.save("BioEntry", sequence); >>> tx.commit(); >>> session.flush(); >>> session.clear(); >>> } catch (HibernateException ex) { >>> tx.rollback(); >>> ex.printStackTrace(); >>> } >>> } >>> } >>> >>> public static void main(String[] args) throws BioException, >>> FileNotFoundException { >>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>> } >>> } >>> ================================================================ >>> org.hibernate.exception.ConstraintViolationException: could not insert: >>> [Namespace] >>> at >>> >>> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>> at >>> >>> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >>> at >>> >>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >>> at >>> >>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>> at >>> >>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>> at >>> >>> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> 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.cascade(Cascade.java:130) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> 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 primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>> Caused by: >>> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>> Duplicate entry 'genbank' for key 'name' >>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>> at >>> >>> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >>> at >>> >>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >>> ... 31 more >>> ================================================================ >>> >>> _______________________________________________ >>> BioSQL-l mailing list >>> BioSQL-l at lists.open-bio.org >>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>> >>> > > From gwu at molbio.mgh.harvard.edu Wed May 21 14:12:36 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Wed, 21 May 2008 14:12:36 -0400 Subject: [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: <48346614.6060102@molbio.mgh.harvard.edu> The scenario is quite simple: I'm using the database to store Genbank genome sequences. Later I've to update the sequences when Genbank has newer releases. The following two lines are loading the same sequence twice. The first time will insert a new BioEntry record. the second time will delete the existing record and insert a new record again. sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); Following code is used to load multiple genome sequences by calling the loadSeq() method multiple times. All failed except the first time. sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_006723.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_008945.gbk", "genbank"); The exception message has the details. Since all variables used in loadSeq() are local, and I did the session flush/clear/close, then it should be ok to call the method again. Thank you very much for your help. Gang Richard Holland wrote: > I'm not sure why you'd want to do that? Either way, as far as I know, > Hibernate sessions are not designed for that. If you want to delete > the sequence then replace it with a completely new sequence object, > you have to create a new sequence object - you can't reuse the one you > just deleted. The session info is embedded into that object so even if > you clear the session, the object still refers to it. > > If you just want to load a sequence, modify it, then save it back, you > should just load it then use saveOrUpdate to save it back again with > changes. If you want to replace objects in your database, don't load > them, just delete them, then use save to create new objects in their > place. > > cheers, > Richard > > 2008/5/21 gang wu : > >> I got another problem with almost the same code(see attached code and >> output). If I call the loadSeq() only once, everything works fine. The >> second call of the same method will fail. By the exception message, it looks >> like the session is not cleaned up yet though at the end of the method the >> session has been flush/clear/closed. Anything wrong? >> >> Or does anyone have a sequence data loader would like to share? I'm quite >> frustrated after keeping trying to do this seems simple thing without >> success. If I can make it work, I'd like to post it on the mailing list. >> Thanks in advance. >> >> Gang >> >> ==================================================== >> public class SequenceLoaderNew { >> public void loadSeq(String fileName, String namespace) throws >> FileNotFoundException, BioException, SQLException, InterruptedException { >> SessionFactory sessionFactory = new >> Configuration().configure().buildSessionFactory(); >> Session session = sessionFactory.openSession(); >> RichObjectFactory.connectToBioSQL(session); >> Namespace ns = (Namespace) >> RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); >> RichSequenceDB db = new BioSQLRichSequenceDB(session); >> System.out.println("Start loading file " + fileName + " at " + >> System.currentTimeMillis()); >> BufferedReader br = new BufferedReader(new FileReader(fileName)); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >> ns); >> try { >> while (rsi.hasNext()) { >> RichSequence sequence = rsi.nextRichSequence(); >> System.out.println("Loaded sequence" + sequence.getAccession() >> + ", identifier: " + sequence.getIdentifier()); >> Transaction tx = session.beginTransaction(); >> try { >> System.out.println("Delete sequence" + >> sequence.getAccession() + " if exists."); >> db.removeSequence(sequence.getAccession()); >> tx.commit(); >> session.flush(); >> session.clear(); >> } catch (Exception ex) { >> if (tx != null) { >> tx.rollback(); >> } >> } >> try { >> tx = session.beginTransaction(); >> System.out.println("Save sequence " + >> sequence.getAccession()); >> //session.save("BioEntry", sequence); >> //db.addSequence(sequence); >> db.addRichSequence(sequence); >> tx.commit(); >> System.out.println("Finished savig sequence " + >> sequence.getAccession() + "\n"); >> } catch (HibernateException ex) { >> tx.rollback(); >> ex.printStackTrace(); >> } >> } >> } finally { >> session.flush(); >> session.clear(); >> session.close(); >> } >> } >> >> public static void main(String[] args) throws BioException, >> FileNotFoundException, InterruptedException, SQLException { >> SequenceLoaderNew sl = new SequenceLoaderNew(); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> } >> } >> ==================================================== >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> Finished savig sequence NC_005813 >> >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> org.hibernate.NonUniqueObjectException: a different object with the same >> identifier value was already associated with the session: [Term#20] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> 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.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> 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:107) >> 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 primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> Exception in thread "main" org.hibernate.NonUniqueObjectException: a >> different object with the same identifier value was already associated with >> the session: [Term#19] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> 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.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> 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.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) >> at >> org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) >> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> ==================================================== >> >> Richard Holland wrote: >> >>> Forgot to copy my reply back to the lists! >>> >>> >>> ---------- Forwarded message ---------- >>> From: Richard Holland >>> Date: 2008/5/20 >>> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >>> To: gang wu >>> >>> >>> You need to substitute this line: >>> >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >>> SimpleNamespace(namespace)); >>> >>> with this line: >>> >>> Namespace ns = >>> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >>> Object[]{namespace}); >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); >>> >>> cheers, >>> Richard >>> >>> PS. You're the second person who has quoted this section of code on >>> this list recently, and had the same problem with it. If you got it >>> from a website somewhere, could you send me the URL so I can get in >>> touch with the authors and get them to correct it? Thanks! >>> >>> 2008/5/20 gang wu : >>> >>> >>>> Hi all, >>>> >>>> I'm trying to load Genbank sequence into BioSQL database with >>>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >>>> exception when loading new sequences or reloading the same sequence. >>>> Seems >>>> the Hibernate is trying to insert "genbank" namespace again. Can anybody >>>> tell me what I did wrong? Thanks in advance. >>>> >>>> Gang >>>> >>>> ================================================================ >>>> public class SequenceLoaderNew { >>>> public void loadSeq(String fileName, String namespace) throws >>>> FileNotFoundException, BioException { >>>> System.out.println("Start loading file " + fileName + " at " + >>>> System.currentTimeMillis()); >>>> BufferedReader br = new BufferedReader(new FileReader(fileName)); >>>> Session session = new >>>> Configuration().configure().buildSessionFactory().openSession(); >>>> RichObjectFactory.connectToBioSQL(session); >>>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >>>> new >>>> SimpleNamespace(namespace)); >>>> while (rsi.hasNext()) { >>>> Transaction tx = session.beginTransaction(); >>>> RichSequence sequence = rsi.nextRichSequence(); >>>> System.out.println("Loaded sequence" + sequence.getAccession() + >>>> ", identifier: " + sequence.getIdentifier()); >>>> try { >>>> System.out.println("Delete sequence" + >>>> sequence.getAccession() >>>> + " if exists."); >>>> db.removeSequence(sequence.getAccession()); >>>> } catch (Exception ex) { >>>> } >>>> try { >>>> System.out.println("Save sequence " + >>>> sequence.getAccession()); >>>> session.save("BioEntry", sequence); >>>> tx.commit(); >>>> session.flush(); >>>> session.clear(); >>>> } catch (HibernateException ex) { >>>> tx.rollback(); >>>> ex.printStackTrace(); >>>> } >>>> } >>>> } >>>> >>>> public static void main(String[] args) throws BioException, >>>> FileNotFoundException { >>>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>>> } >>>> } >>>> ================================================================ >>>> org.hibernate.exception.ConstraintViolationException: could not insert: >>>> [Namespace] >>>> at >>>> >>>> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>>> at >>>> >>>> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>>> at >>>> >>>> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >>>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> 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.cascade(Cascade.java:130) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> 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 primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >>>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>>> Caused by: >>>> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>>> Duplicate entry 'genbank' for key 'name' >>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>>> at >>>> >>>> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >>>> ... 31 more >>>> ================================================================ >>>> >>>> _______________________________________________ >>>> BioSQL-l mailing list >>>> BioSQL-l at lists.open-bio.org >>>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>>> >>>> >>>> >> From dicknetherlands at gmail.com Wed May 21 14:40:41 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Wed, 21 May 2008 19:40:41 +0100 Subject: [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: Sorry, I misread the original question. My bad. What it actually seems that you're doing is simply iterating through a genbank file, deleting from the db that already exist, then replacing them with members from the file. Looking more closely it seems that it is complaining about duplicated Term objects, probably because the cache is getting confused with all this flushing and clearing. Have you tried running this code without flushing and clearing the session? If not, try also inserting If that didn't work, then after each call to flush(), insert a RichObjectFactory.clearLRUCache() call. That really will completely clear memory of all objects from the database. cheers, Richard 2008/5/21 Richard Holland : > I'm not sure why you'd want to do that? Either way, as far as I know, > Hibernate sessions are not designed for that. If you want to delete > the sequence then replace it with a completely new sequence object, > you have to create a new sequence object - you can't reuse the one you > just deleted. The session info is embedded into that object so even if > you clear the session, the object still refers to it. > > If you just want to load a sequence, modify it, then save it back, you > should just load it then use saveOrUpdate to save it back again with > changes. If you want to replace objects in your database, don't load > them, just delete them, then use save to create new objects in their > place. > > cheers, > Richard > > 2008/5/21 gang wu : >> I got another problem with almost the same code(see attached code and >> output). If I call the loadSeq() only once, everything works fine. The >> second call of the same method will fail. By the exception message, it looks >> like the session is not cleaned up yet though at the end of the method the >> session has been flush/clear/closed. Anything wrong? >> >> Or does anyone have a sequence data loader would like to share? I'm quite >> frustrated after keeping trying to do this seems simple thing without >> success. If I can make it work, I'd like to post it on the mailing list. >> Thanks in advance. >> >> Gang >> >> ==================================================== >> public class SequenceLoaderNew { >> public void loadSeq(String fileName, String namespace) throws >> FileNotFoundException, BioException, SQLException, InterruptedException { >> SessionFactory sessionFactory = new >> Configuration().configure().buildSessionFactory(); >> Session session = sessionFactory.openSession(); >> RichObjectFactory.connectToBioSQL(session); >> Namespace ns = (Namespace) >> RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); >> RichSequenceDB db = new BioSQLRichSequenceDB(session); >> System.out.println("Start loading file " + fileName + " at " + >> System.currentTimeMillis()); >> BufferedReader br = new BufferedReader(new FileReader(fileName)); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >> ns); >> try { >> while (rsi.hasNext()) { >> RichSequence sequence = rsi.nextRichSequence(); >> System.out.println("Loaded sequence" + sequence.getAccession() >> + ", identifier: " + sequence.getIdentifier()); >> Transaction tx = session.beginTransaction(); >> try { >> System.out.println("Delete sequence" + >> sequence.getAccession() + " if exists."); >> db.removeSequence(sequence.getAccession()); >> tx.commit(); >> session.flush(); >> session.clear(); >> } catch (Exception ex) { >> if (tx != null) { >> tx.rollback(); >> } >> } >> try { >> tx = session.beginTransaction(); >> System.out.println("Save sequence " + >> sequence.getAccession()); >> //session.save("BioEntry", sequence); >> //db.addSequence(sequence); >> db.addRichSequence(sequence); >> tx.commit(); >> System.out.println("Finished savig sequence " + >> sequence.getAccession() + "\n"); >> } catch (HibernateException ex) { >> tx.rollback(); >> ex.printStackTrace(); >> } >> } >> } finally { >> session.flush(); >> session.clear(); >> session.close(); >> } >> } >> >> public static void main(String[] args) throws BioException, >> FileNotFoundException, InterruptedException, SQLException { >> SequenceLoaderNew sl = new SequenceLoaderNew(); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> } >> } >> ==================================================== >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> Finished savig sequence NC_005813 >> >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> org.hibernate.NonUniqueObjectException: a different object with the same >> identifier value was already associated with the session: [Term#20] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> 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.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> 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:107) >> 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 primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> Exception in thread "main" org.hibernate.NonUniqueObjectException: a >> different object with the same identifier value was already associated with >> the session: [Term#19] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> 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.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> 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.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) >> at >> org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) >> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> ==================================================== >> >> Richard Holland wrote: >>> >>> Forgot to copy my reply back to the lists! >>> >>> >>> ---------- Forwarded message ---------- >>> From: Richard Holland >>> Date: 2008/5/20 >>> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >>> To: gang wu >>> >>> >>> You need to substitute this line: >>> >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >>> SimpleNamespace(namespace)); >>> >>> with this line: >>> >>> Namespace ns = >>> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >>> Object[]{namespace}); >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); >>> >>> cheers, >>> Richard >>> >>> PS. You're the second person who has quoted this section of code on >>> this list recently, and had the same problem with it. If you got it >>> from a website somewhere, could you send me the URL so I can get in >>> touch with the authors and get them to correct it? Thanks! >>> >>> 2008/5/20 gang wu : >>> >>>> >>>> Hi all, >>>> >>>> I'm trying to load Genbank sequence into BioSQL database with >>>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >>>> exception when loading new sequences or reloading the same sequence. >>>> Seems >>>> the Hibernate is trying to insert "genbank" namespace again. Can anybody >>>> tell me what I did wrong? Thanks in advance. >>>> >>>> Gang >>>> >>>> ================================================================ >>>> public class SequenceLoaderNew { >>>> public void loadSeq(String fileName, String namespace) throws >>>> FileNotFoundException, BioException { >>>> System.out.println("Start loading file " + fileName + " at " + >>>> System.currentTimeMillis()); >>>> BufferedReader br = new BufferedReader(new FileReader(fileName)); >>>> Session session = new >>>> Configuration().configure().buildSessionFactory().openSession(); >>>> RichObjectFactory.connectToBioSQL(session); >>>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >>>> new >>>> SimpleNamespace(namespace)); >>>> while (rsi.hasNext()) { >>>> Transaction tx = session.beginTransaction(); >>>> RichSequence sequence = rsi.nextRichSequence(); >>>> System.out.println("Loaded sequence" + sequence.getAccession() + >>>> ", identifier: " + sequence.getIdentifier()); >>>> try { >>>> System.out.println("Delete sequence" + >>>> sequence.getAccession() >>>> + " if exists."); >>>> db.removeSequence(sequence.getAccession()); >>>> } catch (Exception ex) { >>>> } >>>> try { >>>> System.out.println("Save sequence " + >>>> sequence.getAccession()); >>>> session.save("BioEntry", sequence); >>>> tx.commit(); >>>> session.flush(); >>>> session.clear(); >>>> } catch (HibernateException ex) { >>>> tx.rollback(); >>>> ex.printStackTrace(); >>>> } >>>> } >>>> } >>>> >>>> public static void main(String[] args) throws BioException, >>>> FileNotFoundException { >>>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>>> } >>>> } >>>> ================================================================ >>>> org.hibernate.exception.ConstraintViolationException: could not insert: >>>> [Namespace] >>>> at >>>> >>>> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>>> at >>>> >>>> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>>> at >>>> >>>> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >>>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> 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.hiber