From dev-return-14977-apmail-openjpa-dev-archive=openjpa.apache.org@openjpa.apache.org Mon Feb 08 14:09:52 2010 Return-Path: Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: (qmail 72290 invoked from network); 8 Feb 2010 14:09:52 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 8 Feb 2010 14:09:52 -0000 Received: (qmail 68661 invoked by uid 500); 8 Feb 2010 14:09:52 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 68613 invoked by uid 500); 8 Feb 2010 14:09:52 -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 68603 invoked by uid 99); 8 Feb 2010 14:09:52 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Feb 2010 14:09:52 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Feb 2010 14:09:49 +0000 Received: from brutus.apache.org (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 0E48029A0011 for ; Mon, 8 Feb 2010 06:09:28 -0800 (PST) Message-ID: <1538531523.121171265638168057.JavaMail.jira@brutus.apache.org> Date: Mon, 8 Feb 2010 14:09:28 +0000 (UTC) From: "Mateusz User (JIRA)" To: dev@openjpa.apache.org Subject: [jira] Issue Comment Edited: (OPENJPA-1226) Can not merge entity with nested embeddable In-Reply-To: <244547106.1249431254813.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/OPENJPA-1226?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12830947#action_12830947 ] Mateusz User edited comment on OPENJPA-1226 at 2/8/10 2:08 PM: --------------------------------------------------------------- In openJPA-1.2.1 version it still exist: setters are omitted.. @Embeddable public class Address { private String street; private String homeNr; private String placeNr; private String city; private String zip; @Column(name = "street") public String getStreet() { return street; } @Column(name = "home_nr") public String getHomeNr() { return homeNr; } @Column(name = "place_nr") public String getPlaceNr() { return placeNr; } @Column(name = "city") public String getCity() { return city; } @Column(name = "zip") public String getZip() { return zip; } } @Embeddable public class Invoice { private String name; private Address address = new Address(); private String nip; @Column(name = "invoice_name") public String getName() { return name; } @Embedded @AttributeOverrides({ @AttributeOverride(name = "street", column = @Column(name = "invoice_address_street")), @AttributeOverride(name = "homeNr", column = @Column(name = "invoice_address_home_nr")), @AttributeOverride(name = "placeNr", column = @Column(name = "invoice_address_place_nr")), @AttributeOverride(name = "city", column = @Column(name = "invoice_address_city")), @AttributeOverride(name = "zip", column = @Column(name = "invoice_address_zip")) }) public Address getAddress() { return address; } @Column(name = "invoice_nip") public String getNip() { return nip; } } @Embeddable public class Modification { private Date createdAt; private Date updatedAt; @Temporal(TemporalType.TIMESTAMP) @Column(name = "created_at") public Date getCreatedAt() { return createdAt; } @Temporal(TemporalType.TIMESTAMP) @Column(name = "updated_at") public Date getUpdatedAt() { return updatedAt; } public static Modification currentDate() { Modification result = new Modification(); Date date = new Date(); result.setCreatedAt(date); result.setUpdatedAt(date); return result; } } @MappedSuperclass public abstract class BaseID { private Integer id; private Integer flag; private Modification modification; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "id") public Integer getId() { return id; } @Column(name = "flag") public Integer getFlag() { return flag; } @Embedded public Modification getModification() { return modification; } } @Entity @Table(name = "offline_app_users_payment") public class OfflineUserPayment extends BaseID { private Date paymentDate; private Users user; private Payment payment; private Integer status; private String transaction; private Invoice invoice; @Temporal(TemporalType.TIMESTAMP) @Column(name = "payment_date") public Date getPaymentDate() { return paymentDate; } @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="user_id") public Users getUser() { return user; } @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="payment_id") public Payment getPayment() { return payment; } @Column(name = "status") public Integer getStatus() { return status; } @Column(name = "transaction_id") public String getTransaction() { return transaction; } @Embedded public Invoice getInvoice() { return invoice; } } Using merge on new object (should generate database insert): OfflineUserPayment newUserPayment = new OfflineUserPayment(); newUserPayment.setFlag(1); newUserPayment.setModification(Modification.currentDate()); newUserPayment.setPayment(payment); newUserPayment.setPaymentDate(null); newUserPayment.setStatus(-1); newUserPayment.setUser(user); Invoice invoice = new Invoice(); invoice.setName(remoteInvoice.getName()); invoice.setNip(remoteInvoice.getNip()); invoice.getAddress().setStreet(remoteInvoice.getStreet()); invoice.getAddress().setHomeNr(remoteInvoice.getHomeNr()); invoice.getAddress().setPlaceNr(remoteInvoice.getPlaceNr()); invoice.getAddress().setCity(remoteInvoice.getCity()); invoice.getAddress().setZip(remoteInvoice.getZip()); newUserPayment.setInvoice(invoice); getEntityManager().persist(newUserPayment); ///Stacktrace: org.apache.openjpa.persistence.ArgumentException: Cannot manipulate identity of type "com.net.recepty.webservice.server.domain.Address": it's identity type is unknown. at org.apache.openjpa.kernel.StateManagerImpl.(StateManagerImpl.java:162) at org.apache.openjpa.kernel.BrokerImpl.embed(BrokerImpl.java:2653) at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:93) at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241) at org.apache.openjpa.kernel.AttachStrategy.attachField(AttachStrategy.java:202) at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:153) at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241) at org.apache.openjpa.kernel.AttachStrategy.attachField(AttachStrategy.java:202) at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:153) at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241) at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:101) at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3212) at org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1158) at org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:769) was (Author: urbanq): In openJPA-1.2.1 version it still exist: setters are omitted.. @Embeddable public class Address { private String street; private String homeNr; private String placeNr; private String city; private String zip; @Column(name = "street") public String getStreet() { return street; } @Column(name = "home_nr") public String getHomeNr() { return homeNr; } @Column(name = "place_nr") public String getPlaceNr() { return placeNr; } @Column(name = "city") public String getCity() { return city; } @Column(name = "zip") public String getZip() { return zip; } } @Embeddable public class Invoice { private String name; private Address address = new Address(); private String nip; @Column(name = "invoice_name") public String getName() { return name; } @Embedded @AttributeOverrides({ @AttributeOverride(name = "street", column = @Column(name = "invoice_address_street")), @AttributeOverride(name = "homeNr", column = @Column(name = "invoice_address_home_nr")), @AttributeOverride(name = "placeNr", column = @Column(name = "invoice_address_place_nr")), @AttributeOverride(name = "city", column = @Column(name = "invoice_address_city")), @AttributeOverride(name = "zip", column = @Column(name = "invoice_address_zip")) }) public Address getAddress() { return address; } @Column(name = "invoice_nip") public String getNip() { return nip; } } @Entity @Table(name = "offline_app_users_payment") public class OfflineUserPayment extends BaseID { private Date paymentDate; private Users user; private Payment payment; private Integer status; private String transaction; private Invoice invoice; @Temporal(TemporalType.TIMESTAMP) @Column(name = "payment_date") public Date getPaymentDate() { return paymentDate; } @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="user_id") public Users getUser() { return user; } @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="payment_id") public Payment getPayment() { return payment; } @Column(name = "status") public Integer getStatus() { return status; } @Column(name = "transaction_id") public String getTransaction() { return transaction; } @Embedded public Invoice getInvoice() { return invoice; } } Using merge on new object (should generate database insert): OfflineUserPayment newUserPayment = new OfflineUserPayment(); newUserPayment.setFlag(1); newUserPayment.setModification(Modification.currentDate()); newUserPayment.setPayment(payment); newUserPayment.setPaymentDate(null); newUserPayment.setStatus(-1); newUserPayment.setUser(user); Invoice invoice = new Invoice(); invoice.setName(remoteInvoice.getName()); invoice.setNip(remoteInvoice.getNip()); invoice.getAddress().setStreet(remoteInvoice.getStreet()); invoice.getAddress().setHomeNr(remoteInvoice.getHomeNr()); invoice.getAddress().setPlaceNr(remoteInvoice.getPlaceNr()); invoice.getAddress().setCity(remoteInvoice.getCity()); invoice.getAddress().setZip(remoteInvoice.getZip()); newUserPayment.setInvoice(invoice); getEntityManager().persist(newUserPayment); ///Stacktrace: org.apache.openjpa.persistence.ArgumentException: Cannot manipulate identity of type "com.net.recepty.webservice.server.domain.Address": it's identity type is unknown. at org.apache.openjpa.kernel.StateManagerImpl.(StateManagerImpl.java:162) at org.apache.openjpa.kernel.BrokerImpl.embed(BrokerImpl.java:2653) at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:93) at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241) at org.apache.openjpa.kernel.AttachStrategy.attachField(AttachStrategy.java:202) at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:153) at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241) at org.apache.openjpa.kernel.AttachStrategy.attachField(AttachStrategy.java:202) at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:153) at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241) at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:101) at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3212) at org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1158) at org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:769) > Can not merge entity with nested embeddable > ------------------------------------------- > > Key: OPENJPA-1226 > URL: https://issues.apache.org/jira/browse/OPENJPA-1226 > Project: OpenJPA > Issue Type: Bug > Components: kernel > Reporter: Fay Wang > Fix For: 2.0.0-M3 > > > When an entity has nested embeddables, the merge operation fails with the following exception: > org.apache.openjpa.persistence.ArgumentException: > Cannot manipulate identity of type "com.ibm.wssvt.acme.annuity.common.bean.jpa.Address": it's identity type is unknown. > at org.apache.openjpa.kernel.StateManagerImpl.(StateManagerImpl.java:173) > at org.apache.openjpa.kernel.BrokerImpl.embed(BrokerImpl.java:2770) > at org.apache.openjpa.kernel.DetachedStateManager.attach(DetachedStateManager.java:106) > at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:251) > at org.apache.openjpa.kernel.DetachedStateManager.attach(DetachedStateManager.java:244) > at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:251) > at org.apache.openjpa.kernel.AttachStrategy.attachMap(AttachStrategy.java:462) > at org.apache.openjpa.kernel.DetachedStateManager.attach(DetachedStateManager.java:269) > at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:251) > at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:104) > at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3346) > at org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1176) > at org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:852) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.