You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Fay Wang (JIRA)" <ji...@apache.org> on 2009/08/05 02:14:14 UTC
[jira] Created: (OPENJPA-1226) Can not merge entity with nested
embeddable
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
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.<init>(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.
[jira] Issue Comment Edited: (OPENJPA-1226) Can not merge entity
with nested embeddable
Posted by "Mateusz User (JIRA)" <ji...@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:10 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().merge(newUserPayment);
///Stacktrace:
<openjpa-1.2.1-r752877:753278 nonfatal user error> 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.<init>(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;
}
}
@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:
<openjpa-1.2.1-r752877:753278 nonfatal user error> 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.<init>(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.<init>(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.
[jira] Closed: (OPENJPA-1226) Can not merge entity with nested
embeddable
Posted by "Fay Wang (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1226?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Fay Wang closed OPENJPA-1226.
-----------------------------
> 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
>
>
> 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.<init>(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.
[jira] Updated: (OPENJPA-1226) Can not merge entity with nested
embeddable
Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1226?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Donald Woods updated OPENJPA-1226:
----------------------------------
Fix Version/s: (was: 2.0.0)
2.0.0-M3
> 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.<init>(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.
[jira] Resolved: (OPENJPA-1226) Can not merge entity with nested
embeddable
Posted by "Fay Wang (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1226?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Fay Wang resolved OPENJPA-1226.
-------------------------------
Resolution: Fixed
> 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
>
>
> 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.<init>(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.
[jira] Commented: (OPENJPA-1226) Can not merge entity with nested
embeddable
Posted by "Mateusz User (JIRA)" <ji...@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 commented on OPENJPA-1226:
---------------------------------------
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:
<openjpa-1.2.1-r752877:753278 nonfatal user error> 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.<init>(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.<init>(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.
[jira] Issue Comment Edited: (OPENJPA-1226) Can not merge entity
with nested embeddable
Posted by "Mateusz User (JIRA)" <ji...@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:
<openjpa-1.2.1-r752877:753278 nonfatal user error> 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.<init>(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:
<openjpa-1.2.1-r752877:753278 nonfatal user error> 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.<init>(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.<init>(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.