Hi Mike Thanks for the hint it seemed related to the order in which my tests were executed in my Test Suite. As soon as I moved that particular test forward all tests passed. Value was generated as expected. Do you know if there is a way to make it so that openjpa doesn't remove the 00 at the front of the number. For example I am trying to get a generated format of 0001 and to increase by one. So the next number would be 0002 is there anyway of doing this thanks again.
David On Wed, 2011-02-23 at 11:41 -0600, Michael Dick wrote: > Hi David, > > From a JPA spec perspective you're right - the @GV annotation can only > be used with IDs. OpenJPA lets you use it on any field [1], but that > support might not be perfect. > > The stacks look like the transaction was rolled back and it's the > rollback that requires an active tran. There's also an exception > trying to close an EM which is already closed - coming from your > teardown method. Could the teardown exception be hiding the root cause > for the rollback? > > -mike > > > [1] > http://openjpa.apache.org/builds/latest/docs/manual/manual.html#jpa_overview_meta_gen > > On Wed, Feb 23, 2011 at 11:32 AM, David Beer <david.m.b...@gmail.com> > wrote: > Hi > > From a bit more research it seem @GeneratedValue can only be > used with > @Id. If this is the case what is the best way to insert auto > generated > data based on a sequence and the previous number. > > David > > > On Wed, 2011-02-23 at 15:56 +0000, David Beer wrote: > > Hi Mike > > > > This is the full stack trace. > > > > <openjpa-2.0.1-r422266:989424 nonfatal user error> > > org.apache.openjpa.persistence.InvalidStateException: Can > only perform > > operation while a transaction is active. > > at > > > > org.apache.openjpa.kernel.BrokerImpl.assertTransactionOperation(BrokerImpl.java:4595) > > at > org.apache.openjpa.kernel.BrokerImpl.rollback(BrokerImpl.java:1496) > > at > > > > org.apache.openjpa.kernel.DelegatingBroker.rollback(DelegatingBroker.java:933) > > at > > > > org.apache.openjpa.persistence.EntityManagerImpl.rollback(EntityManagerImpl.java:589) > > at > > > > com.copperarrow.crm.basemodel.jpa.UsersTest.testCommitUser(UsersTest.java:67) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > > at > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > > at > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > > at java.lang.reflect.Method.invoke(Method.java:597) > > at org.junit.runners.model.FrameworkMethod > > $1.runReflectiveCall(FrameworkMethod.java:44) > > at > > > > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > > at > > > > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) > > at > > > > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) > > at > > > > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > > at > > > > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) > > at > > > > org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) > > at > > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) > > at > > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) > > at org.junit.runners.ParentRunner > $3.run(ParentRunner.java:193) > > at org.junit.runners.ParentRunner > $1.schedule(ParentRunner.java:52) > > at > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) > > at org.junit.runners.ParentRunner.access > $000(ParentRunner.java:42) > > at org.junit.runners.ParentRunner > $2.evaluate(ParentRunner.java:184) > > at > > > > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > > at > > > > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) > > at > org.junit.runners.ParentRunner.run(ParentRunner.java:236) > > at org.junit.runners.Suite.runChild(Suite.java:128) > > at org.junit.runners.Suite.runChild(Suite.java:24) > > at org.junit.runners.ParentRunner > $3.run(ParentRunner.java:193) > > at org.junit.runners.ParentRunner > $1.schedule(ParentRunner.java:52) > > at > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) > > at org.junit.runners.ParentRunner.access > $000(ParentRunner.java:42) > > at org.junit.runners.ParentRunner > $2.evaluate(ParentRunner.java:184) > > at > > > > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > > at > > > > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) > > at > org.junit.runners.ParentRunner.run(ParentRunner.java:236) > > at > > > > org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35) > > at > > > > org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:115) > > at > > > > org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > > at > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > > at > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > > at java.lang.reflect.Method.invoke(Method.java:597) > > at org.apache.maven.surefire.booter.ProviderFactory > > $ClassLoaderProxy.invoke(ProviderFactory.java:103) > > at $Proxy0.invoke(Unknown Source) > > at > > > > org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150) > > at > > > > org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:91) > > at > > > > org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69) > > > > com.copperarrow.crm.basemodel.jpa.PersistSuite Time > elapsed: 0.091 sec > > <<< ERROR! > > <openjpa-2.0.1-r422266:989424 fatal user error> > > org.apache.openjpa.persistence.InvalidStateException: The > context has > > been closed. The stack trace at which the context was > closed is > > available if Runtime=TRACE logging is enabled. > > at > > > org.apache.openjpa.kernel.BrokerImpl.assertOpen(BrokerImpl.java:4573) > > at > > > > org.apache.openjpa.kernel.BrokerImpl.beginOperation(BrokerImpl.java:1895) > > at > org.apache.openjpa.kernel.BrokerImpl.close(BrokerImpl.java:4271) > > at > > > > org.apache.openjpa.kernel.DelegatingBroker.close(DelegatingBroker.java:1346) > > at > > > > org.apache.openjpa.persistence.EntityManagerImpl.close(EntityManagerImpl.java:1282) > > at > > > > com.copperarrow.crm.basemodel.jpa.DatabaseConnection.shutdown(DatabaseConnection.java:72) > > at > > > > com.copperarrow.crm.basemodel.jpa.PersistSuite.tearDown(PersistSuite.java:38) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > > at > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > > at > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > > at java.lang.reflect.Method.invoke(Method.java:597) > > at org.junit.runners.model.FrameworkMethod > > $1.runReflectiveCall(FrameworkMethod.java:44) > > at > > > > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > > at > > > > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) > > at > > > > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37) > > at > org.junit.runners.ParentRunner.run(ParentRunner.java:236) > > at > > > > org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35) > > at > > > > org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:115) > > at > > > > org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > > at > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > > at > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > > at java.lang.reflect.Method.invoke(Method.java:597) > > at org.apache.maven.surefire.booter.ProviderFactory > > $ClassLoaderProxy.invoke(ProviderFactory.java:103) > > at $Proxy0.invoke(Unknown Source) > > at > > > > org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150) > > at > > > > org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:91) > > at > > > > org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69) > > > > The full class code is as follows: > > > > @Entity > > @Table(name = "t_USERS") > > public class Users implements Serializable { > > > > /** Serialisation ID. **/ > > private static final long serialVersionUID = 1L; > > /** Entity id. **/ > > @Id > > @GeneratedValue(strategy = GenerationType.IDENTITY) > > private Long id; > > /** User ID. This will be a user ID starting from 0001. > **/ > > @GeneratedValue(strategy = GenerationType.TABLE, > generator = > > "UserGen") > > @TableGenerator(name = "UserGen", table = "USER_GEN", > pkColumnName = > > "PK", > > valueColumnName = "USERID") > > private Long userID; > > /** User Name associated with the user used to login > with. **/ > > private String userName; > > /** hash of the users password. **/ > > private String passHash; > > /** Role Category is the role of the user e.g. Admin, > sales, etc. > > **/ > > @Enumerated(EnumType.STRING) > > private RoleCategory roleCategory; > > /** ci is the contact information associated with the > user. **/ > > @Embedded > > private ContactInformation ci; > > > > /** > > * @return id > > */ > > public Long getId() { > > return id; > > } > > > > /** > > * @param nId the id to set > > */ > > public void setId(final Long nId) { > > this.id = nId; > > } > > > > /** > > * @return the serialVersionUID > > */ > > public static long getSerialVersionUID() { > > return serialVersionUID; > > } > > > > /** > > * @return the userID > > */ > > public Long getUserID() { > > return userID; > > } > > > > /** > > * @param userID the userID to set > > */ > > public void setUserID(Long userID) { > > this.userID = userID; > > } > > > > /** > > * @return the userName > > */ > > public String getUserName() { > > return userName; > > } > > > > /** > > * @param userName the userName to set > > */ > > public void setUserName(String userName) { > > this.userName = userName; > > } > > > > /** > > * @return the passHash > > */ > > public String getPassHash() { > > return passHash; > > } > > > > /** > > * @param passHash the passHash to set > > */ > > public void setPassHash(String passHash) { > > this.passHash = passHash; > > } > > > > /** > > * @return the roleCategory > > */ > > public RoleCategory getRoleCategory() { > > return roleCategory; > > } > > > > /** > > * @param roleCategory the roleCategory to set > > */ > > public void setRoleCategory(RoleCategory roleCategory) { > > this.roleCategory = roleCategory; > > } > > > > /** > > * @return the ci > > */ > > public ContactInformation getCi() { > > return ci; > > } > > > > /** > > * @param ci the ci to set > > */ > > public void setCi(ContactInformation ci) { > > this.ci = ci; > > } > > > > @Override > > public int hashCode() { > > int hash = 0; > > hash += (id != null ? id.hashCode() : 0); > > return hash; > > } > > > > @Override > > public boolean equals(final Object object) { > > // TODO: Warning - this method won't work in the > case the id > > fields > > // are not set > > if (!(object instanceof Users)) { > > return false; > > } > > Users other = (Users) object; > > if ((this.id == null && other.id != null) > > || (this.id != null && ! > this.id.equals(other.id))) { > > return false; > > } > > return true; > > } > > > > @Override > > public String toString() { > > return > "com.copperarrow.crm.basemodel.jpa.Users[ id=" + id + > > " ]"; > > } > > > > If you need anything else just ask. > > > > Thanks > > > > David > > > > On Wed, 2011-02-23 at 09:17 -0600, Michael Dick wrote: > > > Hi David, > > > > > > Could you post the stack for the exception you're getting? > > > > > > GeneratedValues should be obtained by your > non-jta-data-source (or > > > openjpa.ConnectionFactory2) - and that shouldn't require a > > > transaction. > > > > > > -mike > > > > > > On Wed, Feb 23, 2011 at 8:30 AM, David Beer > > > <david.m.b...@googlemail.com> wrote: > > > Hi all > > > > > > I am trying to get a value for a field set when > commited to > > > the db, to > > > be auto generated. This field is not an ID for the > table. I > > > seem to get > > > the error message "InvalidStateException: Can only > perform > > > operation > > > while a transaction is active." > > > > > > My class looks like the following: > > > > > > @GeneratedValue(strategy = GenerationType.TABLE, > generator = > > > "UserGen") > > > @TableGenerator(name = "UserGen", table = > "USER_GEN", > > > pkColumnName = > > > "PK", valueColumnName = "USERID") > > > private Long userID; > > > > > > Any Thoughts. > > > > > > Thanks > > > > > > David > > > > > > > > > > > > > >