我有两个这样的实体(第二个与第一个有关系):
@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在数据库中创建新的FoaAdresseIcx。
我该怎么做?
答案 0 :(得分:0)
使用原始类型作为数据库ID有一个你正在经历的缺点。默认值为0
,这是数据库ID的完全有效值。
持久性提供程序假定该实体不是新实体,而是分离并相应地运行。
解决方案是在您的情况下使用包装类(或其他非基本类,如UUID
)作为ids - Long
。除非明确实例化,否则id属性将为null
,提供者将正确地将实体标识为新实体。