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.