From may03307 at gmail.com Mon May 5 11:11:35 2008 From: may03307 at gmail.com (=?GB2312?B?zau54sC8?=) Date: Mon, 5 May 2008 16:11:35 +0100 Subject: [Biojava-l] codon position Message-ID: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Hi, everyone I will do a program to calculate the cg skew for each codon position (first base, second base and third base) as well as for the whole gene. For each codon position, I found the method to get the codons: SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); Are there any method or package can get the first, second or third letter from each codon? Thanks a lot! Lan From may03307 at gmail.com Mon May 5 11:11:35 2008 From: may03307 at gmail.com (=?GB2312?B?zau54sC8?=) Date: Mon, 5 May 2008 16:11:35 +0100 Subject: [Biojava-l] codon position Message-ID: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Hi, everyone I will do a program to calculate the cg skew for each codon position (first base, second base and third base) as well as for the whole gene. For each codon position, I found the method to get the codons: SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); Are there any method or package can get the first, second or third letter from each codon? Thanks a lot! Lan From markjschreiber at gmail.com Mon May 5 21:59:04 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Tue, 6 May 2008 09:59:04 +0800 Subject: [Biojava-l] codon position In-Reply-To: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> References: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Message-ID: <93b45ca50805051859r124378c8y5e519ff302036b6a@mail.gmail.com> Hi - The listing at the this URL shows how to break a codon into it's component symbols. http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Component - Mark On Mon, May 5, 2008 at 11:11 PM, ?????? wrote: > Hi, everyone > > I will do a program to calculate the cg skew for each codon position (first > base, second base and third base) as well as for the whole gene. For each > codon position, I found the method to get the codons: > > SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); > > Are there any method or package can get the first, second or third letter > from each codon? > > Thanks a lot! > Lan > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From markjschreiber at gmail.com Mon May 5 21:59:04 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Tue, 6 May 2008 09:59:04 +0800 Subject: [Biojava-l] codon position In-Reply-To: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> References: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Message-ID: <93b45ca50805051859r124378c8y5e519ff302036b6a@mail.gmail.com> Hi - The listing at the this URL shows how to break a codon into it's component symbols. http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Component - Mark On Mon, May 5, 2008 at 11:11 PM, ?????? wrote: > Hi, everyone > > I will do a program to calculate the cg skew for each codon position (first > base, second base and third base) as well as for the whole gene. For each > codon position, I found the method to get the codons: > > SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); > > Are there any method or package can get the first, second or third letter > from each codon? > > Thanks a lot! > Lan > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From mail at florianschatz.de Wed May 7 06:15:36 2008 From: mail at florianschatz.de (Florian Schatz) Date: Wed, 7 May 2008 12:15:36 +0200 Subject: [Biojava-l] Gene direction Message-ID: Hello, is there any way to find out the direction of a gene, parsed from a Genbank file? e.g.: Genbank file: gene 185510..186463 or gene complement(203350..203505) I can not find something in the .getLocation() nor in the .getAnnotation() of a gene-Feature. Best, Florian From martin.jones at ed.ac.uk Wed May 7 06:36:53 2008 From: martin.jones at ed.ac.uk (Martin Jones) Date: Wed, 7 May 2008 11:36:53 +0100 Subject: [Biojava-l] Gene direction In-Reply-To: References: Message-ID: Hi, I've recently faced the same problem. Try this: RichSequenceIterator seqs = RichSequence.IOTools.readGenbankDNA(in, null); RichSequence mySeq = seqs.nextRichSequence(); for (Object o : mySeq.getFeatureSet()) { RichFeature f = (RichFeature) o; RichLocation l = (RichLocation) f.getLocation(); System.out.println("strand is " + l.getStrand().getName()); } I think that getStrand().getName() will return either "+" or "-". If you're looking at a genbank record for a single gene, you'll probably have a single "gene" feature and a single "CDS" feature. Martin 2008/5/7 Florian Schatz : > Hello, > > is there any way to find out the direction of a gene, parsed from a Genbank > file? > e.g.: Genbank file: > gene 185510..186463 > or > gene complement(203350..203505) > > I can not find something in the .getLocation() nor in the .getAnnotation() > of a gene-Feature. > > Best, > Florian > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > > -- ------------------------ Martin Jones School of Biological Sciences, Ashworth Laboratories, King's Buildings Edinburgh, EH9 3JT, UK From community at struck.lu Wed May 7 06:31:14 2008 From: community at struck.lu (community at struck.lu) Date: Wed, 07 May 2008 12:31:14 +0200 Subject: [Biojava-l] single letter code from protein ambiguities? Message-ID: Hi,I am just beginning to use biojava and I have a question concerning the parsing of protein sequences containing ambiguities:Is it possible to get all the possible amino acids at each position of the protein sequence with a single letter code instead of the three letter code?Suppose I would translate a DNA sequence containing an "N", so the protein translation would also contain ambiguities:SymbolList symL = DNATools.createDNA("atnatg");SymbolList symL2 = DNATools.toProtein(symL);Iterator symIt = symL2.iterator();System.out.println(symL2.seqString());OUTPUT:XMSymbol hm;while (symIt.hasNext()) {    hm = (Symbol) symIt.next();    System.out.println(hm.getName());}OUTOUT:[MET ILE]METWould it be possible to ouput:MIMRegards,Daniel Struck _________________________________________________________ Mail sent using root eSolutions Webmailer - www.root.lu From markjschreiber at gmail.com Wed May 7 06:54:49 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Wed, 7 May 2008 18:54:49 +0800 Subject: [Biojava-l] single letter code from protein ambiguities? In-Reply-To: References: Message-ID: <93b45ca50805070354q540a3147tef59034b74d430f2@mail.gmail.com> Hi - Yes, this is absolutely possible. If biojava can create an unambigous amino acid from an ambigous codon it will. If the possible amino acids are a choice of 2 or more an ambiguity symbol (BasisSymbol) is created that contains those amino acids. Note that if you turn any ambiguous amino acid into a String then you will just get an X so you need to decompose it into it's underlying AtomicSymbols. See http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Ambiguous for some idea (except in your case you need to do the reverse). This would make another nice example for the cookbook so when you get some demo code working it would be good if you could put it up on the wiki. - Mark On Wed, May 7, 2008 at 6:31 PM, community at struck.lu wrote: > Hi,I am just beginning to use biojava and I have a question concerning the > parsing of protein sequences containing ambiguities:Is it possible to get all > the possible amino acids at each position of the protein sequence with a > single letter code instead of the three letter code?Suppose I would translate > a DNA sequence containing an "N", so the protein translation would > also contain ambiguities:SymbolList symL = > DNATools.createDNA("atnatg");SymbolList symL2 = > DNATools.toProtein(symL);Iterator symIt = > symL2.iterator();System.out.println(symL2.seqString());OUTPUT:XMSymbol > hm;while (symIt.hasNext()) {    hm = (Symbol) > symIt.next();    System.out.println(hm.getName());}OUTOUT:[MET > ILE]METWould it be possible to ouput:MIMRegards,Daniel Struck > _________________________________________________________ > Mail sent using root eSolutions Webmailer - www.root.lu > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From gcappuccilli at protelix.com Thu May 8 11:25:32 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Thu, 8 May 2008 08:25:32 -0700 Subject: [Biojava-l] BioEntryRelationship query problem Message-ID: First of all, I am new here so I apologize in advance if I am discussing something obvious. Moreover I am far from being a BioJava or Hibernate guru. I am working on a small project using BioJava (1.6) + BioSQL (1.0) (mysql 4.1.22 on Mac OS X server 10.4.11). I want to persist relationships between BioEntry objects. Storing objects to DB didn't give any problems. Sample code: Transaction tx=s.beginTransaction(); try { ComparableTerm term=RichObjectFactory.getDefaultOntology ().getOrCreateTerm("TestTerm"); Namespace ns=RichObjectFactory.getDefaultNamespace(); BioEntry parent=new SimpleBioEntry(ns, "parentbe", "pACCESSION",0); BioEntry child=new SimpleBioEntry(ns, "childbe", "cACCESSION",0); BioEntryRelationship rel=new SimpleBioEntryRelationship (parent, child, term, null); parent.addRelationship(rel); s.saveOrUpdate("BioEntry",parent ); tx.commit(); } catch (Exception ex) { tx.rollback(); } When I started to query the db I got errors from hibernate (see below). After digging a little I found out that hibernate couldn't query the Bioentry_relationship table. Even a simple "from BioEntryRelationship" query was giving me these errors. 09:43:19,088 ERROR BasicPropertyAccessor:94 - IllegalArgumentException in class: org.biojavax.bio.SimpleBioEntryRelationship, setter method of property: object 09:43:19,089 ERROR BasicPropertyAccessor:98 - expected type: org.biojavax.bio.BioEntry, actual value: org.biojavax.bio.seq.SimpleRichFeature$$EnhancerByCGLIB$$91b34b44 Checking the mapping files I found the following line in the BioEntryRelationship.hbm.xml: It looked strange to me. So I've changed to Now I can query relationships without problems. Did I do the right thing or I am messing up the mapping and I am breaking something else? If this has been already discussed I apologize and I would appreciate a link to the original thread. Thank you in advance G. From armita_sh at yahoo.com Tue May 13 13:49:26 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:26 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <739889.77239.qm@web51405.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 13:49:31 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:31 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <876778.61385.qm@web51409.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 13:49:42 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:42 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <862338.69656.qm@web51402.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 13:49:47 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:47 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <403542.32695.qm@web51410.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 13:49:52 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:52 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <196253.35082.qm@web51411.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From ap3 at sanger.ac.uk Wed May 14 08:20:53 2008 From: ap3 at sanger.ac.uk (Andreas Prlic) Date: Wed, 14 May 2008 13:20:53 +0100 Subject: [Biojava-l] Constructing Backbone of Protein In-Reply-To: <403542.32695.qm@web51410.mail.re2.yahoo.com> References: <403542.32695.qm@web51410.mail.re2.yahoo.com> Message-ID: <318B9A5F-4F2D-4A95-845D-B4B81B0397FD@sanger.ac.uk> Hi Armita, > I need to write a program that can construct the backbone of the > protein from its sequence and the relevant phi and psi angles. I > want to know if there is a class or method that can help me to > calculate the coordinates form phi and psi angles! Where do you get the phi and psi angles from? sounds a bit like a protein structure prediction problem, which Biojava can not do. If you have a structure and you want to get the phi and psi angles, you can have a look at the example in the docu: http://www.biojava.org/ docs/api16/org/biojava/bio/structure/Structure.html There are also some tools for calculations on atoms and amino acids available from: http://www.biojava.org/docs/api16/org/biojava/bio/structure/Calc.html Cheers, Andreas ----------------------------------------------------------------------- Andreas Prlic Wellcome Trust Sanger Institute Hinxton, Cambridge CB10 1SA, UK +44 (0) 1223 49 6891 ----------------------------------------------------------------------- -- The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE. From community at struck.lu Mon May 19 05:35:54 2008 From: community at struck.lu (community at struck.lu) Date: Mon, 19 May 2008 11:35:54 +0200 Subject: [Biojava-l] single letter code from protein ambiguities? In-Reply-To: <93b45ca50805070354q540a3147tef59034b74d430f2@mail.gmail.com> References: <93b45ca50805070354q540a3147tef59034b74d430f2@mail.gmail.com> Message-ID: Thank you for pointing me in the right direction:##################################             SymbolList symL = DNATools.createDNA("atnatggnnatg");            SymbolList symL2 = DNATools.toProtein(symL);            System.out.println(symL2.seqString());            for (Iterator i = symL2.iterator(); i.hasNext();) {                Symbol sym = (Symbol) i.next();                System.out.println(sym.getName() + "#");            }            SymbolTokenization toke = symL2.getAlphabet().getTokenization("token");            for (Iterator i = symL2.iterator(); i.hasNext();) {                Symbol sym = (Symbol) i.next();                Alphabet arg = sym.getMatches();                for (Iterator i2 = ((FiniteAlphabet) arg).iterator(); i2.hasNext();) {                    Symbol sym2 = (Symbol) i2.next();                    System.out.println("toke: "+toke.tokenizeSymbol(sym2));                    System.out.println("name: "+sym2.getName());                }                System.out.println("\n");            }################################## This will print out the single letter code: System.out.println("toke: "+toke.tokenizeSymbol(sym2)); This will print out the three letter code: System.out.println("name: "+sym2.getName()); Do you think it is worthwhile to put this sample code in the wiki?Thanks,Daniel"Mark Schreiber" <markjschreiber at gmail.com> wrote: > Hi - > > Yes, this is absolutely possible. If biojava can create an unambigous > amino acid from an ambigous codon it will. If the possible amino acids > are a choice of 2 or more an ambiguity symbol (BasisSymbol) is created > that contains those amino acids. > > Note that if you turn any ambiguous amino acid into a String then you > will just get an X so you need to decompose it into it's underlying > AtomicSymbols. > > See http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Ambiguous for > some idea (except in your case you need to do the reverse). > > This would make another nice example for the cookbook so when you get > some demo code working it would be good if you could put it up on the > wiki. > > - Mark > > On Wed, May 7, 2008 at 6:31 PM, community at struck.lu <community at struck.lu> > wrote: > > Hi,I am just beginning to use biojava and I have a question concerning the > > parsing of protein sequences containing ambiguities:Is it possible to get > all > > the possible amino acids at each position of the protein sequence with a > > single letter code instead of the three letter code?Suppose I would > translate > > a DNA sequence containing an &quot;N&quot;, so the protein translation would > > also contain ambiguities:SymbolList symL = > > DNATools.createDNA(&quot;atnatg&quot;);SymbolList symL2 = > > DNATools.toProtein(symL);Iterator symIt = > > symL2.iterator();System.out.println(symL2.seqString());OUTPUT:XMSymbol > > hm;while (symIt.hasNext()) {&nbsp;&nbsp;&nbsp; hm = (Symbol) > > symIt.next();&nbsp;&nbsp;&nbsp; > System.out.println(hm.getName());}OUTOUT:[MET > > ILE]METWould it be possible to ouput:MIMRegards,Daniel Struck > > _________________________________________________________ > > Mail sent using root eSolutions Webmailer - www.root.lu > > _______________________________________________ > > Biojava-l mailing list - Biojava-l at lists.open-bio.org > > http://lists.open-bio.org/mailman/listinfo/biojava-l > > > _________________________________________________________ Mail sent using root eSolutions Webmailer - www.root.lu From ap3 at sanger.ac.uk Mon May 19 11:56:38 2008 From: ap3 at sanger.ac.uk (Andreas Prlic) Date: Mon, 19 May 2008 16:56:38 +0100 Subject: [Biojava-l] Open DAS position Message-ID: Hi, The Wellcome Trust Sanger Institute has an open position for a DAS developer (see below). If you have further questions please contact me - ap3 at sanger.ac.uk see also: http://www.sanger.ac.uk/cgi-bin/careers/jobs/jobslist? action=item;format=html;id=742;location=external Andreas === The Wellcome Trust Sanger Institute leads the world in genomic research, with an expanding scientific programme dedicated to understanding gene function in health & disease. With several hundred servers provided by more than 40 institutions, the Distributed Annotation System (DAS) is a frequently used data integration technology both internationally and within the Sanger Institute. We are looking for a Senior Web Developer who will be responsible to further develop, maintain, and coordinate the DAS activities within the Sanger Institute and in close collaboration with the international community that has grown around DAS. You will be involved in maintaining and further developing DAS by implementation of high quality, user-friendly code and applications.You will ensure that the Institute's data resources are made available worldwide in highly reliable services. Good communication skills are essential as the role involves liaising with lab scientists and bioinformatitions. Occasional traveling might be required. Qualifications: Bioinformatics/Computer Science degree or relevant experience. Experience of working with the following is essential: Java and/or PERL programming language (including object oriented software design) in a Unix/Linux environment, MySQL. Experience of working with the following is desirable: A good knowledge of Linux systems, a good understanding of web technologies, web systems administration (Apache) and web architecture design, web services (REST,SOAP), HTML/CSS/Javascript/ AJAX. Knowledge of the Ensembl API and DAS would be advantageous. For further information regarding the post, please contact ap3 at sanger.ac.uk Salary range for this position is ?27,316 to ?36,951. We offer a comprehensive range of benefits including a final salary pension scheme and excellent on-site facilities. Further details can be found on our website www.sanger.ac.uk/careers/jobs/ To apply for this position please email a covering letter, CV (including 2 referees) and current salary details, quoting reference SW1662 to: recruit at sanger.ac.uk. Or post your application to: Human Resources Department, The Wellcome Trust Sanger Institute, Genome Campus, Hinxton, Cambridge, CB10 1SA, UK. The closing date for applications is 15th June 2008. ----------------------------------------------------------------------- Andreas Prlic Wellcome Trust Sanger Institute Hinxton, Cambridge CB10 1SA, UK +44 (0) 1223 49 6891 ----------------------------------------------------------------------- -- The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE. 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: [Biojava-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: [Biojava-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: [Biojava-l] [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 gcappuccilli at protelix.com Tue May 20 15:07:04 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Tue, 20 May 2008 12:07:04 -0700 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue Message-ID: <4CE0E6A1-F082-4A2D-AFFC-7A4233D36350@protelix.com> Looks like Richard had already answered... Sorry for the doubled reply... at least I know got it right :-))) From gcappuccilli at protelix.com Tue May 20 15:17:56 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Tue, 20 May 2008 12:17:56 -0700 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue Message-ID: I am not an expert, but I think the problem is that you try to create a new Namespace over and over. You should use singletones instead. Try to do something like this afet you connect to BioSQL: Namespace n = (Namespace) RichObjectFactory.getObject(SimpleNamespace.class, new Object[] {namespace}); And then read your genebank like this. RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, n); Agaian I am not an expert so I might be wrong. Try and let me know. Ciao Guido From gcappuccilli at protelix.com Tue May 20 14:58:35 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Tue, 20 May 2008 11:58:35 -0700 Subject: [Biojava-l] Load, Update Genbank sequence issue Message-ID: <7116E9C2-4523-4C25-A2AC-D97E74E3A662@protelix.com> I am not an expert, but I think the problem is that you try to create a new Namespace over and over. You should use singletones instead. Try to do something like this afet you connect to BioSQL: Namespace n = (Namespace) RichObjectFactory.getObject(SimpleNamespace.class, new Object[] {namespace}); And then read your genebank like this. RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, n); Again I am not an expert so I might be wrong. Try and let me know. Ciao Guido 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: [Biojava-l] [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 markus.jaritz at novartis.com Wed May 21 03:37:36 2008 From: markus.jaritz at novartis.com (markus.jaritz at novartis.com) Date: Wed, 21 May 2008 09:37:36 +0200 Subject: [Biojava-l] Markus Jaritz is out of the office. Message-ID: I will be out of the office starting 21.05.2008 and will not return until 31.05.2008. I will leave Novartis with June 1st. If you like to stay in contact with me and I had no chance to contact you before I left, please check my pages at www.LinkedIn.com and www.xing.com. Thank you and all the best Markus Jaritz 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: [Biojava-l] [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: [Biojava-l] [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 debrown at unity.ncsu.edu Wed May 21 14:18:53 2008 From: debrown at unity.ncsu.edu (Doug Brown) Date: Wed, 21 May 2008 14:18:53 -0400 Subject: [Biojava-l] Unexpected behavior from GFF3 parser In-Reply-To: References: Message-ID: <4834678D.8090604@unity.ncsu.edu> Hi All, In the process of putting together a piece of code to load GFF3 features into an extant BioSQL database, I ran across a scenario wherein the values for notes stored in the data base (seqfeature_qualifier_value tale) are of the form "[= 54.9]" and the value as it occurred in the GFF3 file were of the form "... ;someName= 54.9; ..." There are two things that trouble me about this: 1) the brackets are puzzling. It looks as if some piece of code is calling SimpleRichAnnotation.toString() 2) inclusion of the equals sign and lack of trimming for the value. As for #2, a quick inspection of the code shows line 343 of GFF3Parser.java maybe erroneous in that it does not eliminate the equals sign. That then would cause a failure of the trimming. As for #1, the problem might be due to my high level of ignorance of proper Biojavax programming style. OR, it may be due to something in hibernate calling toString on the Set returned by SimpleRichAnnotation.getNoteSet(). I am attempting to add GFF3 features to an bioentries in a BioSQL database. Being unable to find any code similar to that which lives in the org.biojava.bio.program.gff package, I started rolling my own. If there is an easier way, would somebody please set me on the correct path? Here is a code snippet from the GFF3DocumentHandler implementation: public void recordLine( GFF3Record record) { . . . // use the HQL approach to get a thin sequence Query q = session.createQuery( "from ThinSequence as s where s.name = :acc"); q.setString( "acc", record.getSequenceID()); seq = (Sequence)q.uniqueResult(); // add the GFF annotation(s) to the sequence if ( seq != null) this.getAnnotator( (GFF3Record.Impl)record, true).annotate( seq); . . . } . . . public SequenceAnnotator getAnnotator( final GFF3Record.Impl rec, final boolean checkSeqName) { return new SequenceAnnotator() { public Sequence annotate(Sequence seq) throws BioException, ChangeVetoException { if (!checkSeqName || rec.getSequenceID().equals(seq.getName())) { Feature.Template thisTemplate = null; //Build the three types of annotations: 1) non-stranded, non-phased // 2) stranded, non-phased, or 3) stranded, phased. if (rec.getStrand() == StrandedFeature.UNKNOWN) { RichFeature.Template plain = new RichFeature.Template(); plain.annotation = Annotation.EMPTY_ANNOTATION; } else if (rec.getPhase() == GFFTools.NO_FRAME) { StrandedFeature.Template stranded = new StrandedFeature.Template(); stranded.annotation = Annotation.EMPTY_ANNOTATION; stranded.strand = rec.getStrand(); thisTemplate = stranded; } else { // translate GFF phases into Biojava phases FramedFeature.Template framed = new FramedFeature.Template(); framed.annotation = Annotation.EMPTY_ANNOTATION; framed.strand = rec.getStrand(); switch (rec.getPhase()) { case 0: framed.readingFrame = FramedFeature.FRAME_0; break; case 1: framed.readingFrame = FramedFeature.FRAME_1; break; case 2: framed.readingFrame = FramedFeature.FRAME_2; break; } thisTemplate = framed; } // set the items common to all three types thisTemplate.location = new RangeLocation( rec.getStart(), rec.getEnd()); thisTemplate.typeTerm = rec.getType(); thisTemplate.sourceTerm = rec.getSource(); // the annotation was already filled out by the parser thisTemplate.annotation = rec.getAnnotation(); // annotate the seqeunce seq.createFeature(thisTemplate); } return seq; } }; } Regards, Doug Brown -- Doug Brown - Bioinformatics Fungal Genomics Laboratory Center for Integrated Fungal Research North Carolina State University Campus Box 7251, Raleigh, NC 27695-7251 https://www.fungalgenomics.ncsu.edu/~debrown/ Tel: (919) 513-0394, Fax (919) 513-0024 e-mail: doug_brown AtSign ncsu.edu 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: [Biojava-l] [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