Return-Path: X-Original-To: apmail-openjpa-dev-archive@www.apache.org Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id F23F67363 for ; Thu, 17 Nov 2011 16:57:42 +0000 (UTC) Received: (qmail 48134 invoked by uid 500); 17 Nov 2011 16:57:42 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 48098 invoked by uid 500); 17 Nov 2011 16:57:42 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 48090 invoked by uid 99); 17 Nov 2011 16:57:42 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 17 Nov 2011 16:57:42 +0000 X-ASF-Spam-Status: No, hits=2.9 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS,URI_HEX X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of allee8285@gmail.com designates 209.85.214.46 as permitted sender) Received: from [209.85.214.46] (HELO mail-bw0-f46.google.com) (209.85.214.46) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 17 Nov 2011 16:57:35 +0000 Received: by bke11 with SMTP id 11so3082766bke.33 for ; Thu, 17 Nov 2011 08:57:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=7xb1moW6FwtseDfyuAWqSpbAJHu67WX6wdu7gqp0pHQ=; b=qkfLMVx6V/ifqyvNHoAvSgw05AHnLOTkg/5qt6Kn9ccf/Ld19A7ZJcANBtGQEloDXA BsSuUvc8/iBkCmNX8/uQ3amj4qs9LK1aVXoz/lSz1Ymf1b27n7nbZlWvP8KC82c1VoTE cl8x8v50wzrmzP9mFaC+LQHhT8TxJkdb1PUOc= MIME-Version: 1.0 Received: by 10.204.157.27 with SMTP id z27mr34381703bkw.8.1321549035017; Thu, 17 Nov 2011 08:57:15 -0800 (PST) Received: by 10.204.117.73 with HTTP; Thu, 17 Nov 2011 08:57:14 -0800 (PST) In-Reply-To: <1321546832988-7004684.post@n2.nabble.com> References: <1321546832988-7004684.post@n2.nabble.com> Date: Thu, 17 Nov 2011 10:57:14 -0600 Message-ID: Subject: Re: an object of type with oid already exists in this context another cannot be persisted with @EmbeddedId From: Albert Lee To: dev@openjpa.apache.org Content-Type: multipart/alternative; boundary=0015175d0a02c9189004b1f11c1b X-Virus-Checked: Checked by ClamAV on apache.org --0015175d0a02c9189004b1f11c1b Content-Type: text/plain; charset=ISO-8859-1 1) In the Execution class, each iteration has a tx begin but no commit or rollback, is this intended? 2) Since it is complaining about id conflict and most of the entities uses sequence id generation, you may want to enable openjpa.Log=SQL=TRACE to see when and how many "SELECT seq NEXTVAL" (or something of this nature) happened Albert On Thu, Nov 17, 2011 at 10:20 AM, sergioflores 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 listaAsignacion; > > public void setListaAsignacion(List listaAsignacion) { > > this.listaAsignacion = listaAsignacion; > } > > public List 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 listaAsignacion; > > public List getListaAsignacion() { > > return listaAsignacion; > } > > public void setListaAsignacion(List 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 listaAsignacion = new ArrayList(); > > /* 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 > > 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"> > > transaction-type="RESOURCE_LOCAL"> > > > value="jdbc:oracle:thin:@x.x.x.x:1521:orcl"/> > value="user"/> > value="1234"/> > value="oracle.jdbc.OracleDriver"/> > > > value="buildSchema(ForeignKeys=true)" /> > value="managed" /> > value="oracle(DriverVendor=oracle)" /> > value="pessimistic" /> > /> > value="supported"/> > value="native"/> > > > > > > > > *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... > > > > 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. > -- Albert Lee. --0015175d0a02c9189004b1f11c1b--