Hello,
I'm currently migrating from EclipseLink to OpenJPA 2.2.0 to access
MySQL 5. Since I use AUTO_INCREMENT in my entity classes, I have my id
field annotated with:
@GeneratedValue(strategy = GenerationType.IDENTITY)
When I try to persist a new entity I get the following exception:
javax.servlet.ServletException: javax.el.ELException: javax.ejb.EJBException:
The bean encountered a non-application exception; nested exception is:
<openjpa-2.2.0-r422266:1244990 fatal store error>
org.apache.openjpa.persistence.OptimisticLockException: Attempted to attach deleted instance type
"class com.hildeberto.architect.system.domain.Functionality" with oid "0". If the
instance is new, the version field should be left to its default value.
FailedObject: com.hildeberto.architect.system.domain.Functionality@3ca76aa1
javax.faces.webapp.FacesServlet.service(FacesServlet.java:229)
*cause mère*
org.apache.myfaces.view.facelets.el.ContextAwareELException:
javax.el.ELException: javax.ejb.EJBException: The bean encountered a
non-application exception; nested exception is:
<openjpa-2.2.0-r422266:1244990 fatal store error>
org.apache.openjpa.persistence.OptimisticLockException: Attempted to attach deleted instance type
"class com.hildeberto.architect.system.domain.Functionality" with oid "0". If the
instance is new, the version field should be left to its default value.
FailedObject: com.hildeberto.architect.system.domain.Functionality@3ca76aa1
org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:108)
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:68)
javax.faces.component.UICommand.broadcast(UICommand.java:120)
javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1028)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286)
javax.faces.component.UIViewRoot._process(UIViewRoot.java:1375)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:38)
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
When I remove the annotation @GeneratedValue it works. It doesn't make
sense to me because this annotation is part of the specification. My
persistence.xml is configured as follows:
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="architect-pu" transaction-type="JTA">
<jta-data-source>jdbc/architect</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="openjpa.Log" value="SQL=TRACE"/>
<property name="openjpa.ConnectionFactoryProperties"
value="PrettyPrint=true, PrettyPrintLineLength=72"/>
<property name="openjpa.jdbc.DBDictionary"
value="org.apache.openjpa.jdbc.sql.MySQLDictionary"/>
</properties>
</persistence-unit>
</persistence>
I made some research but didn't get any conclusive solution for that.
Thanks in advance for any advice.
Hildeberto