Re: How to get generated keys without requerying the database?
You are welcome. I'm glad there was a simple workaround. Thanks for filing a JIRA. It has plenty of detail, which is great. Keep an eye on the JIRA for fix availability. -Jeremy On Tue, Jan 25, 2011 at 5:28 PM, robsinner wrote: > > Jeremy (and Kevin), > > Thank you so much for your quick turnaround time and response and the > workaround. > > I modified the persistence.xml with > > I also created a bug in JIRA- My first one so I hope that it was detailed > enough. > https://issues.apache.org/jira/browse/OPENJPA-1930 > > Thanks again, it is much appreciated. > > R > S > -- > View this message in context: > http://openjpa.208410.n2.nabble.com/How-to-get-generated-keys-without-requerying-the-database-tp5957346p5960986.html > Sent from the OpenJPA Users mailing list archive at Nabble.com. >
Re: How to get generated keys without requerying the database?
Jeremy (and Kevin), Thank you so much for your quick turnaround time and response and the workaround. I modified the persistence.xml with I also created a bug in JIRA- My first one so I hope that it was detailed enough. https://issues.apache.org/jira/browse/OPENJPA-1930 Thanks again, it is much appreciated. R S -- View this message in context: http://openjpa.208410.n2.nabble.com/How-to-get-generated-keys-without-requerying-the-database-tp5957346p5960986.html Sent from the OpenJPA Users mailing list archive at Nabble.com.
Re: How to get generated keys without requerying the database?
Thanks for the DB and JCC info. I remembered there being some issue with getGeneratedKeys on a JCC driver level, but that was quite a while ago. Your driver and DB level are current, so I quickly set aside that possibility. Using a trimmed down version of your code, I found that there is a bug in OpenJPA's batching update constraint manager (the piece of code that drives batched updates through the JDBC driver). The batching manager currently does not retrieve non-key identity fields on an insert/update operation. Until a fix is available, you can get around the problem by adding this property to your persistence.xml: This property enables the non-batching constraint update manager, which has the proper code to retrieve the generated field. Please file a JIRA for this issue[1] and we'll work on providing a fix. Or let me know and I'd be happy to file one for you. -Jeremy [1] http://issues.apache.org/jira/browse/OPENJPA On Tue, Jan 25, 2011 at 2:55 PM, robsinner wrote: > > DB2 (from Control Center Help About) > Product Identifier SQL09072 > Level Identifier 08030107 > Level DB2 v9.7.200.358 > Build Level s100514 > PTF IP23084 > > JCC Driver is db2jcc4-9.7.100.177.jar, db2jcc_license_cu-9.7.100.177.jar > > Thank you for your help, > > R > S > -- > View this message in context: > http://openjpa.208410.n2.nabble.com/How-to-get-generated-keys-without-requerying-the-database-tp5957346p5960445.html > Sent from the OpenJPA Users mailing list archive at Nabble.com. >
Re: How to get generated keys without requerying the database?
DB2 (from Control Center Help About) Product Identifier SQL09072 Level Identifier 08030107 Level DB2 v9.7.200.358 Build Level s100514 PTF IP23084 JCC Driver is db2jcc4-9.7.100.177.jar, db2jcc_license_cu-9.7.100.177.jar Thank you for your help, R S -- View this message in context: http://openjpa.208410.n2.nabble.com/How-to-get-generated-keys-without-requerying-the-database-tp5957346p5960445.html Sent from the OpenJPA Users mailing list archive at Nabble.com.
Re: How to get generated keys without requerying the database?
DB2 (from Control Center Help About) Product Identifier SQL09072 Level Identifier 08030107 Level DB2 v9.7.200.358 Build Level s100514 PTF IP23084 JCC Driver is db2jcc4-9.7.100.177.jar, db2jcc_license_cu-9.7.100.177.jar Thank you for your help, R S -- View this message in context: http://openjpa.208410.n2.nabble.com/How-to-get-generated-keys-without-requerying-the-database-tp5957346p5960442.html Sent from the OpenJPA Users mailing list archive at Nabble.com.
Re: How to get generated keys without requerying the database?
Rob, Thanks for the additional info and trace. I'll try to reproduce this locally. What level of DB2 and JCC driver are you using? I scanned the trace, but neither jumped out at me. -Jeremy On Tue, Jan 25, 2011 at 12:36 PM, robsinner wrote: > > Kevin, > > Thanks for your response. > > I am including the full log from my junit test with TRACE turned on via > openjpa.Log in persistence.xml > > > I am using the DB2Dictionary in my persistence.xml > > value="org.apache.openjpa.jdbc.sql.DB2Dictionary"/> > > I have a junit test which prints out these two variables from the > DB2Dictionary. > >public void testShowDb2Dictionary() >{ >DB2Dictionary dictionary = new > org.apache.openjpa.jdbc.sql.DB2Dictionary(); > > log.info > ("dictionary.lastGeneratedKeyQuery="+dictionary.lastGeneratedKeyQuery); > //this shows VALUES(IDENTITY_VAL_LOCAL()) > > log.info > ("dictionary.supportsGetGeneratedKeys="+dictionary.supportsGetGeneratedKeys); > //this shows null >} > > This prints out > 2011-01-25 10:27:06,266 INFO [] com.ais.persistence.InpartmasterTest:103 - > dictionary.lastGeneratedKeyQuery=VALUES(IDENTITY_VAL_LOCAL()) > 2011-01-25 10:27:06,266 INFO [] com.ais.persistence.InpartmasterTest:104 - > dictionary.supportsGetGeneratedKeys=null > > I would think the DB2Dictionary.supportsGetGeneratedKeys ==null is part of > the problem. But I dont know how to resolve. > > I know I am able to use stmt.getGeneratedKeys with the same db2 jdbc driver > class (p:driverClass="com.ibm.db2.jcc.DB2Driver") > with a straight JDBC Dao Framework > > Thank you for your help. > > Full Log Below > > 2011-01-25 10:26:55,861 INFO [] > com.cms.shared.ext.firestorm.FirestormUtil:81 - FirestormUtil static init > loading spring > 2011-01-25 10:26:55,876 INFO [] > com.cms.shared.ext.firestorm.FirestormUtil:122 - applicationContext.xml > exists=true > 2011-01-25 10:26:55,878 INFO [] > com.cms.shared.ext.firestorm.FirestormUtil:126 - > > URL=file:/C:/RAD/aircore-JPA-J2-SNAPSHOT/target/classes/applicationContext.xml > 2011-01-25 10:26:55,879 INFO [] > com.cms.shared.ext.firestorm.FirestormUtil:135 - running with > applicationContext.xml > 2011-01-25 10:26:55,880 INFO [] > com.cms.shared.ext.firestorm.FirestormUtil:122 - applicationContext2.xml > exists=true > 2011-01-25 10:26:55,881 INFO [] > com.cms.shared.ext.firestorm.FirestormUtil:126 - > > URL=file:/C:/RAD/aircore-JPA-J2-SNAPSHOT/target/classes/applicationContext2.xml > 2011-01-25 10:26:55,882 INFO [] > com.cms.shared.ext.firestorm.FirestormUtil:135 - running with > applicationContext2.xml > 2011-01-25 10:26:55,883 INFO [] > com.cms.shared.ext.firestorm.FirestormUtil:122 - applicationContext3.xml > exists=false > 2011-01-25 10:26:55,884 ERROR [] > com.cms.shared.ext.firestorm.FirestormUtil:130 - class path resource > [applicationContext3.xml] cannot be resolved to URL because it does not > exist > 2011-01-25 10:26:55,886 ERROR [] > com.cms.shared.ext.firestorm.FirestormUtil:139 - running without > applicationContext3.xml > 2011-01-25 10:26:55,912 INFO [] > com.cms.shared.ext.firestorm.FirestormUtil:101 - building Spring > ClassPathXmlApplicationContext from these files[applicationContext.xml > applicationContext2.xml] > 2011-01-25 10:26:55,957 INFO [] > org.springframework.context.support.ClassPathXmlApplicationContext:456 - > Refreshing > org.springframework.context.support.ClassPathXmlApplicationContext@4998a455 > : > startup date [Tue Jan 25 10:26:55 PST 2011]; root of context hierarchy > 2011-01-25 10:26:56,013 INFO [] > org.springframework.beans.factory.xml.XmlBeanDefinitionReader:315 - Loading > XML bean definitions from class path resource [applicationContext.xml] > 2011-01-25 10:26:56,417 INFO [] > org.springframework.beans.factory.xml.XmlBeanDefinitionReader:315 - Loading > XML bean definitions from class path resource [jpapersistence.xml] > 2011-01-25 10:26:56,669 INFO [] > org.springframework.beans.factory.xml.XmlBeanDefinitionReader:315 - Loading > XML bean definitions from class path resource [stdcore.xml] > 2011-01-25 10:26:59,331 INFO [] > org.springframework.beans.factory.xml.XmlBeanDefinitionReader:315 - Loading > XML bean definitions from class path resource [applicationContext2.xml] > 2011-01-25 10:26:59,384 INFO [] > org.springframework.beans.factory.support.DefaultListableBeanFactory:618 - > Overriding bean definition for bean 'fiscalYrDao': replacing [Generic bean: > class [com.cms.shared.gen.firestorm.jdbc.FiscalYrDaoImpl]; scope=; > abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; > autowireCandidate=true; primary=false; factoryBeanName=null; > factoryMethodName=null; initMethodName=null; destroyMethodName=null; > defined > in class path resource [stdcore.xml]] with [Generic bean: class > [com.cms.shared.gen.firestorm.jdbc.FiscalYrDaoImpl]; scope=; > abstract=false; > lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; > primary=false; factoryBea
Re: How to get generated keys without requerying the database?
Kevin, Thanks for your response. I am including the full log from my junit test with TRACE turned on via openjpa.Log in persistence.xml I am using the DB2Dictionary in my persistence.xml I have a junit test which prints out these two variables from the DB2Dictionary. public void testShowDb2Dictionary() { DB2Dictionary dictionary = new org.apache.openjpa.jdbc.sql.DB2Dictionary(); log.info("dictionary.lastGeneratedKeyQuery="+dictionary.lastGeneratedKeyQuery); //this shows VALUES(IDENTITY_VAL_LOCAL()) log.info("dictionary.supportsGetGeneratedKeys="+dictionary.supportsGetGeneratedKeys); //this shows null } This prints out 2011-01-25 10:27:06,266 INFO [] com.ais.persistence.InpartmasterTest:103 - dictionary.lastGeneratedKeyQuery=VALUES(IDENTITY_VAL_LOCAL()) 2011-01-25 10:27:06,266 INFO [] com.ais.persistence.InpartmasterTest:104 - dictionary.supportsGetGeneratedKeys=null I would think the DB2Dictionary.supportsGetGeneratedKeys ==null is part of the problem. But I dont know how to resolve. I know I am able to use stmt.getGeneratedKeys with the same db2 jdbc driver class (p:driverClass="com.ibm.db2.jcc.DB2Driver") with a straight JDBC Dao Framework Thank you for your help. Full Log Below 2011-01-25 10:26:55,861 INFO [] com.cms.shared.ext.firestorm.FirestormUtil:81 - FirestormUtil static init loading spring 2011-01-25 10:26:55,876 INFO [] com.cms.shared.ext.firestorm.FirestormUtil:122 - applicationContext.xml exists=true 2011-01-25 10:26:55,878 INFO [] com.cms.shared.ext.firestorm.FirestormUtil:126 - URL=file:/C:/RAD/aircore-JPA-J2-SNAPSHOT/target/classes/applicationContext.xml 2011-01-25 10:26:55,879 INFO [] com.cms.shared.ext.firestorm.FirestormUtil:135 - running with applicationContext.xml 2011-01-25 10:26:55,880 INFO [] com.cms.shared.ext.firestorm.FirestormUtil:122 - applicationContext2.xml exists=true 2011-01-25 10:26:55,881 INFO [] com.cms.shared.ext.firestorm.FirestormUtil:126 - URL=file:/C:/RAD/aircore-JPA-J2-SNAPSHOT/target/classes/applicationContext2.xml 2011-01-25 10:26:55,882 INFO [] com.cms.shared.ext.firestorm.FirestormUtil:135 - running with applicationContext2.xml 2011-01-25 10:26:55,883 INFO [] com.cms.shared.ext.firestorm.FirestormUtil:122 - applicationContext3.xml exists=false 2011-01-25 10:26:55,884 ERROR [] com.cms.shared.ext.firestorm.FirestormUtil:130 - class path resource [applicationContext3.xml] cannot be resolved to URL because it does not exist 2011-01-25 10:26:55,886 ERROR [] com.cms.shared.ext.firestorm.FirestormUtil:139 - running without applicationContext3.xml 2011-01-25 10:26:55,912 INFO [] com.cms.shared.ext.firestorm.FirestormUtil:101 - building Spring ClassPathXmlApplicationContext from these files[applicationContext.xml applicationContext2.xml] 2011-01-25 10:26:55,957 INFO [] org.springframework.context.support.ClassPathXmlApplicationContext:456 - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4998a455: startup date [Tue Jan 25 10:26:55 PST 2011]; root of context hierarchy 2011-01-25 10:26:56,013 INFO [] org.springframework.beans.factory.xml.XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [applicationContext.xml] 2011-01-25 10:26:56,417 INFO [] org.springframework.beans.factory.xml.XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [jpapersistence.xml] 2011-01-25 10:26:56,669 INFO [] org.springframework.beans.factory.xml.XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [stdcore.xml] 2011-01-25 10:26:59,331 INFO [] org.springframework.beans.factory.xml.XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [applicationContext2.xml] 2011-01-25 10:26:59,384 INFO [] org.springframework.beans.factory.support.DefaultListableBeanFactory:618 - Overriding bean definition for bean 'fiscalYrDao': replacing [Generic bean: class [com.cms.shared.gen.firestorm.jdbc.FiscalYrDaoImpl]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [stdcore.xml]] with [Generic bean: class [com.cms.shared.gen.firestorm.jdbc.FiscalYrDaoImpl]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [applicationContext2.xml]] 2011-01-25 10:26:59,392 INFO [] org.springframework.beans.factory.support.DefaultListableBeanFactory:618 - Overriding bean definition for bean 'aircraftDao': replacing [Generic bean: class [com.cms.shared.gen.firestorm.jdbc.AircraftDaoImpl]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primar
Re: How to get generated keys without requerying the database?
Thanks so much for your quick response. I really appreciate it. I tried adding the em.flush after the em.persist and I am still getting the same behavior i.e. After the insert the dto.recId which is mapped to an non primary key IDENTITY column is not populated on the DTO although the REC_ID exists in the database. I dont know of course but this would lead me to believe that at the lower level stmt.getGeneratedKeys is not getting called to populate "non primary key" IDENTITY Fields I will attempt to post more detailed information in the hopes that will help and not confuse the issue. The Entity/DTO called INPARTMASTER actually not PART /** * The persistent class for the INPARTMASTER database table. * */ @Entity @Table(name="INPARTMASTER") public class Inpartmaster implements Serializable, Persistent { private static final long serialVersionUID = 1L; @EmbeddedId private InpartmasterPK pk; ... more columns here @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="REC_ID") private Integer recId; ... more columns here InpartmasterPK package com.ais.persistence.entities; import java.io.Serializable; import javax.persistence.Embeddable; @Embeddable public class InmasterPK implements Serializable { private String incomp; private String inindiv; private String inpart; private static final long serialVersionUID = 1L; public InmasterPK() { super(); } getters/setters etc. } public PK insert(DTO dto) throws Exception { EntityManager em = getEntityManager(); em.persist(dto); em.flush();//added to try and retrieve stmt.getGeneratedKeys return dto.getPk(); } I have a Manager class which wraps the DAO. This manager is also transactional with this annotation @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = { Exception.class }) The Manager code at this point simply wraps the DAO code public Inpartmaster insert(Inpartmaster inpartmaster) throws InventoryException { InpartmasterPK pk = null; try { //TODO: add Pre-submit validation process //Calling JPA InpartmasterDao pk = inpartmasterDao.insert(inpartmaster); } catch (Exception e) { log.error(Utility.getStackTrace(e)); log.error(e); throw new InventoryException(e); } return inpartmaster; } The junit code looks like public void testInsert() { try { log.info("insert"); log.info("part="+part); manager = getManager(); pk.setIncomp(comp); pk.setInpart(part); dto.setPk(pk); log.info(dto); dto.setChgdate(new Date()); manager.insert(dto); log.info("recId="+dto.getRecId()); assertFalse("recId is null after insert should not be", dto.getRecId() == null); //fails here the recId is not being populated with something like stmt.getGeneratedKeys } catch(Exception e) { log.error("---"); log.error(Utility.getStackTrace(e)); fail(e.getMessage()); } } The persistence.xml looks like http://java.sun.com/xml/ns/persistence"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd";> org.apache.openjpa.persistence.PersistenceProviderImpl jdbc/db2svr com.ais.persistence.entities.InpartmasterPK com.ais.persistence.entities.Inpartmaster ...more classes here NONE The spring configuration is:
Re: How to get generated keys without requerying the database?
To follow up on Jeremy's post... We have junits for this test scenario, but they are focused on the use of PK fields. Like Jeremy said, this should also work with non-PK fields... The other thing to ensure is that your DB2 database is accurately being detected. Not all databases support this getGeneratedKeys() method capability, so we need to ensure that the target database supports this functionality. It might be worthwhile to turn on TRACE to verify the database configuration is properly detected. Good luck, Kevin On Tue, Jan 25, 2011 at 9:02 AM, Jeremy Bauer wrote: > Hi, > > Based on the code snippets you've provided, it looks like you my just > either > need to call em.flush() to force the DB update or commit the transaction > before getting the recId from the dto. If that doesn't help, repost and > I'll dig a little deeper. OpenJPA refreshes primary key identity fields > after a flush or commit. I think it will/should do the same for non-PK > generated fields. > > hth, > -Jeremy > > On Mon, Jan 24, 2011 at 8:33 PM, robsinner wrote: > > > > > I have an Entity with a non primary key identity column. > > > > This entity > > Part.java > > has the following fields among others > > > >@EmbeddedId > >private PartPK pk; > > > > > >@GeneratedValue(strategy=GenerationType.IDENTITY) > >@Column(name="REC_ID") > >private Integer recId; > > > > Note the EmbeddedId does not contain the Generated Value , the PartPk is > > made up of two strings, one for company and one for part number. > > > > So the Entity has a primary key which is a business composite key. This > > table also has a column in DB2 which is a IDENTITY column which is not > part > > of the primary key. This identity column which is not part of the primary > > key is called REC_ID. > > > > After insert I would like the recId to be populated onto the entity > however > > it is not. In JDBC this is usually accomplished via > > statement.getGeneratedKeys after the insert statements has been run. > > > > For example in a straight JDBC Data Access Object this would be > > accomplished > > after the insert statement by > >// retrieve values from auto-increment columns > >rs = stmt.getGeneratedKeys(); > >if (rs != null && rs.next()) { > >dto.setRecId( new Integer( rs.getInt(1) ) > ); > >} > > > > However when I run a junit test using a simple JPA data access object the > > recId column is null after insert. > > > >public void testInsert() > >{ > >log.info("insert"); > >log.info("part="+part); > > > >manager = getManager(); > > > >pk.setIncomp(comp); > >pk.setInpart(part); > > > >dto.setPk(pk); > > > >log.info(dto); > >manager.insert(dto); > > > >log.info("recId="+dto.getRecId()); > >assertFalse("recId is null after insert should not > > be", dto.getRecId() == > > null); //fails here > > } > > > > > > The manager class is wrapping this data access object code > > > >public PK insert(DTO dto) throws Exception { > >EntityManager em = getEntityManager(); > >em.persist(dto); > >return dto.getPk(); > >} > > > > How do I specify the mapping in the entity with a non primary key > identity > > column such that after an insert the non primary key identity column is > > populated onto the entity. > > > > Among other things I am using Db2 with spring and openjpa 2.2.0. > > > > I believe this has something to do with getGeneratedKeys and how I'm > doing > > the mapping in the entity and possibly DB2 with openjpa. > > > > The table are legacy and are not easily modifiable to accomplish this. Im > > trying to avoid having to relook up the non primary key with a seperate > > query by the primary key after the insert. > > > > Thank you in advance for your assistance. I searched in the nabble users > > list and could not find anything related. If you need more detailed > > information I can post more. I believe this is a simple configuration > done > > incorrectly at the entity level. > > > > Thank you in advance for any assistance you provide. > > -- > > View this message in context: > > > http://openjpa.208410.n2.nabble.com/How-to-get-generated-keys-without-requerying-the-database-tp5957346p5957346.html > > Sent from the OpenJPA Users mailing list archive at Nabble.com. > > >
Re: How to get generated keys without requerying the database?
Hi, Based on the code snippets you've provided, it looks like you my just either need to call em.flush() to force the DB update or commit the transaction before getting the recId from the dto. If that doesn't help, repost and I'll dig a little deeper. OpenJPA refreshes primary key identity fields after a flush or commit. I think it will/should do the same for non-PK generated fields. hth, -Jeremy On Mon, Jan 24, 2011 at 8:33 PM, robsinner wrote: > > I have an Entity with a non primary key identity column. > > This entity > Part.java > has the following fields among others > >@EmbeddedId >private PartPK pk; > > >@GeneratedValue(strategy=GenerationType.IDENTITY) >@Column(name="REC_ID") >private Integer recId; > > Note the EmbeddedId does not contain the Generated Value , the PartPk is > made up of two strings, one for company and one for part number. > > So the Entity has a primary key which is a business composite key. This > table also has a column in DB2 which is a IDENTITY column which is not part > of the primary key. This identity column which is not part of the primary > key is called REC_ID. > > After insert I would like the recId to be populated onto the entity however > it is not. In JDBC this is usually accomplished via > statement.getGeneratedKeys after the insert statements has been run. > > For example in a straight JDBC Data Access Object this would be > accomplished > after the insert statement by >// retrieve values from auto-increment columns >rs = stmt.getGeneratedKeys(); >if (rs != null && rs.next()) { >dto.setRecId( new Integer( rs.getInt(1) ) ); >} > > However when I run a junit test using a simple JPA data access object the > recId column is null after insert. > >public void testInsert() >{ >log.info("insert"); >log.info("part="+part); > >manager = getManager(); > >pk.setIncomp(comp); >pk.setInpart(part); > >dto.setPk(pk); > >log.info(dto); >manager.insert(dto); > >log.info("recId="+dto.getRecId()); >assertFalse("recId is null after insert should not > be", dto.getRecId() == > null); //fails here > } > > > The manager class is wrapping this data access object code > >public PK insert(DTO dto) throws Exception { >EntityManager em = getEntityManager(); >em.persist(dto); >return dto.getPk(); >} > > How do I specify the mapping in the entity with a non primary key identity > column such that after an insert the non primary key identity column is > populated onto the entity. > > Among other things I am using Db2 with spring and openjpa 2.2.0. > > I believe this has something to do with getGeneratedKeys and how I'm doing > the mapping in the entity and possibly DB2 with openjpa. > > The table are legacy and are not easily modifiable to accomplish this. Im > trying to avoid having to relook up the non primary key with a seperate > query by the primary key after the insert. > > Thank you in advance for your assistance. I searched in the nabble users > list and could not find anything related. If you need more detailed > information I can post more. I believe this is a simple configuration done > incorrectly at the entity level. > > Thank you in advance for any assistance you provide. > -- > View this message in context: > http://openjpa.208410.n2.nabble.com/How-to-get-generated-keys-without-requerying-the-database-tp5957346p5957346.html > Sent from the OpenJPA Users mailing list archive at Nabble.com. >