I see that you have openjpa.RuntimeUnenhancedClasses=supported, can you try removing that property and enhancing via a different method[1]? I don't know if that is the culprit, but it is a good place to start.
Thanks, Rick [1] http://openjpa.apache.org/runtime-enhancement.html On Thu, Nov 17, 2011 at 10:20 AM, sergioflores <[email protected]>wrote: > Hi, > I'm have a little problem with JPA. > I can't persist an entity with an @EmbeddedId on cascade. > > This are my entities.... > > ==================================== > *Project.java* > > @Entity > public class Project { > > @Id > @SequenceGenerator(name="PROJECT_GENERATOR" ) > @GeneratedValue(strategy=GenerationType.SEQUENCE, > generator="PROJECT_GENERATOR") > @Column(name="ID_PROJECT") > private long idProyecto; > > private String nombre; > > public void setIdProyecto(long id) { > > this.idProyecto = id; > } > > public long getIdProyecto() { > > return this.idProyecto; > } > > public void setNombre(String nombre) { > > this.nombre = nombre; > } > > public String getNombre() { > > return this.nombre; > } > > @OneToMany(mappedBy = "project", cascade = CascadeType.ALL) > private List<Asignation> listaAsignacion; > > public void setListaAsignacion(List<Asignation> listaAsignacion) { > > this.listaAsignacion = listaAsignacion; > } > > public List<Asignation> getListaAsignacion() { > > return this.listaAsignacion; > } > > } > > *Asignation.java* > > @Entity > public class Asignation { > > @EmbeddedId > private AsignationPk pk; > > private String indicadorEstatus; > > @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) > @JoinColumn(name="ID_PROJECT", nullable=false) > private Project project; > > @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) > @JoinColumn(name="ID_PROFESSOR", nullable=false) > private Professor professor; > > public AsignationPk getAsignacionPk(){ > return pk; > } > > public void setAsignationPk(AsignationPk pk){ > this.pk = pk; > } > > public String getIndicadorEstatus() { > return indicadorEstatus; > } > > public void setIndicadorEstatus(String inIndicadorEstatus) { > indicadorEstatus = inIndicadorEstatus; > } > > public void setProject(Project proyecto){ > this.project = proyecto; > } > > public Project getProject(){ > return this.project; > } > > public void setProfesor(Professor professor){ > this.professor = professor; > } > > public Professor getProfessor(){ > return this.professor; > } > > } > > *AsignationPk.java* > > @Embeddable > public class AsignationPk { > > @Column(name="ID_PROJECT") > private Long idProyecto; > > @Column(name="ID_PROFESSOR") > private Long idProfesor; > > public void setIdProyecto(long id) { > > this.idProyecto = id; > } > > public long getIdProyecto() { > > return this.idProyecto; > } > > public void setIdProfesor(long id) { > > this.idProfesor = id; > } > > public long getIdProfesor() { > > return this.idProfesor; > } > > } > > *Professor.java* > > @Entity > public class Professor { > > @Id > @SequenceGenerator(name="PROFESSOR_GENERATOR" ) > @GeneratedValue(strategy=GenerationType.SEQUENCE, > generator="PROFESSOR_GENERATOR") > @Column(name="ID_PROFESSOR") > private long idProfesor; > > public void setIdProfesor(long id) { > > this.idProfesor = id; > } > > public long getIdProfesor() { > > return this.idProfesor; > } > > @OneToMany(mappedBy = "professor", cascade = CascadeType.ALL) > private List<Asignation> listaAsignacion; > > public List<Asignation> getListaAsignacion() { > > return listaAsignacion; > } > > public void setListaAsignacion(List<Asignation> listaAsignacion) { > > this.listaAsignacion = listaAsignacion; > } > > } > > > *And this is the main....* > > public class Execution { > > public static void main(String[] args) { > > EntityManagerFactory emf = > Persistence.createEntityManagerFactory("PUProject"); > EntityManager em = emf.createEntityManager(); > > for (int x = 0; x < 4; x++) { > > try { > em.getTransaction().begin(); > > Project project = new Project(); > project.setNombre("Project Name"); > > List<Asignation> listaAsignacion = new ArrayList<Asignation>(); > > /* I set the idProfesor and the reference to project object which > will be persisted, > * because I don't know the idProject */ > AsignationPk pk = new AsignationPk(); > pk.setIdProfesor(1L); > Asignation asignation = new Asignation(); > asignation.setAsignationPk(pk); > asignation.setProject(project); > // I = Inactive > // A = Active > asignation.setIndicadorEstatus("A"); > > listaAsignacion.add(asignation); > > project.setListaAsignacion(listaAsignacion); > > } catch (Exception e) { > e.printStackTrace(); > } > > } > > } > > } > > > This is my persistence.xml > <?xml version="1.0" encoding="UTF-8"?> > <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="PUProject" > transaction-type="RESOURCE_LOCAL"> > > <properties> > <property name="javax.persistence.jdbc.url" > value="jdbc:oracle:thin:@x.x.x.x:1521:orcl"/> > <property name="javax.persistence.jdbc.user" > value="user"/> > <property name="javax.persistence.jdbc.password" > value="1234"/> > <property name="javax.persistence.jdbc.driver" > value="oracle.jdbc.OracleDriver"/> > > > <property name="openjpa.jdbc.SynchronizeMappings" > value="buildSchema(ForeignKeys=true)" /> > <property name="openjpa.ConnectionFactoryMode" > value="managed" /> > <property name="openjpa.jdbc.DBDictionary" > value="oracle(DriverVendor=oracle)" /> > <property name="openjpa.LockManager" > value="pessimistic" /> > <property name="openjpa.jdbc.Schema" value="schema" > /> > <property name="openjpa.RuntimeUnenhancedClasses" > value="supported"/> > <property name="openjpa.jdbc.SchemaFactory" > value="native"/> > </properties> > > > </persistence-unit> > </persistence> > > > *Problem...* > > I'm triying to persist a Project entity on cascade, as you can see, 4 > times. > The first time this entity is persisted correctly, but the second time it > doesn't work, and on third work and quarter doesn't work. > This is, one time yes and one time no. > > I get this error... > > > <openjpa-2.0.1-r422266:989424 nonfatal store error> > org.apache.openjpa.persistence.EntityExistsException: An object of type > "package.Asignation" with oid "package.Asignation-package.AsignationPk@0" > already exists in this context; another cannot be persisted. > FailedObject: package.Asignation@14a014a > at > > org.apache.openjpa.kernel.BrokerImpl.checkForDuplicateId(BrokerImpl.java:4958) > at > org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2584) > at > org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2504) > at > org.apache.openjpa.kernel.BrokerImpl.persistAll(BrokerImpl.java:2451) > at > > org.apache.openjpa.kernel.SingleFieldManager.persist(SingleFieldManager.java:268) > at > > org.apache.openjpa.kernel.StateManagerImpl.cascadePersist(StateManagerImpl.java:3020) > at > org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2600) > at > org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2423) > at > > org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1069) > at > > org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:706) > at Execution.main(Execution.java:136) > > Why is this happen? Is this a bug? > > I'm using openJPA 2.0.1 > Oracle 11 > > -- > View this message in context: > http://openjpa.208410.n2.nabble.com/an-object-of-type-with-oid-already-exists-in-this-context-another-cannot-be-persisted-with-EmbeddedId-tp7004684p7004684.html > Sent from the OpenJPA Developers mailing list archive at Nabble.com. > -- *Rick Curtis*
