合并JPA和子类ID

  • 本文关键字:ID 子类 JPA 合并 jpa
  • 更新时间 :
  • 英文 :


我有两个这样的实体(第二个与第一个有关系):

@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创建新的foaaddresseicx在数据库中,如果不存在。

使用基本类型作为DB id有您目前正在经历的缺点。默认值是0,这是一个完全有效的DB id值。

持久性提供程序假定实体不是新的,而是分离的,并据此进行行为。

解决方案是使用包装类(或其他非原语类,如UUID)作为id -在您的情况下是Long。除非显式实例化,否则id属性将为null,并且提供者将正确地将实体识别为new。

最新更新