2014-07-24 117 views
0

我有两个实体是这样的(第二个与第一个关系):JPA和子类ID合并

@Entity 
@Table(name="FOA_ADRESSE_ICX") 
public class FoaAdresseIcx implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="ID_ADRESSE", unique=true, nullable=false, precision=5) 
    private long idAdresse; 

    @Column(length=32) 
    private String bat; 

    @Column(name="COD_POSTAL", length=5) 
    private String codPostal; 

    // getters and setters .... 
} 

@Entity 
@Table(name="FOA_INFOS_ICX") 
public class FoaInfosIcx implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="COD_ICX", unique=true, nullable=false, length=8) 
    private String codIcx; 

    @Column(name="DATE_RAFFRAICHISEMENT") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date dateRaffraichisement; 

    @Column(name="LIB_AGENCE", nullable=false, length=98) 
    private String libAgence; 

    //uni-directional many-to-one association to FoaAdresseIcx 
    @ManyToOne 
    @JoinColumn(name="ID_ADRESSE", nullable=false) 
    private FoaAdresseIcx foaAdresseIcx; 

    // getters and setters.... 
} 

我得到的合并问题:

myEntityMgr.merge(myFoaInfosIcx); 

得到这个例外:

GRAVE: EJB Exception: : javax.persistence.EntityNotFoundException: Unable to find com.groupama.middlgan.entities.FoaAdresseIcx with id 0 

myFoaInfosIcx id为0,因为我不初始化它,因为我想JPA创建新FoaAdress数据库中的eIcx如果不存在。

我该怎么做?

回答

0

使用原始类型作为DB ID具有当前正在经历的负面影响。缺省值为0,这对于数据库标识是完全有效的值。

持久性提供程序假定该实体不是新的,但分离并相应地运行。

解决方案是使用包装类(或其他非原始类,如UUID)作为ID - Long。除非明确实例化,否则id属性将为null,并且提供者将正确标识实体为新的。