我有两个实体对象代表两个数据库表。
表中的两个字段之间存在外键关系..
我尝试从一个实体创建一个新实例并持久化,然后尝试创建另一个实例并将第一个对象作为set ...()方法中的参数传递给secound对象。
但它抛出了Constraint违规异常,因为在数据库中找不到父密钥然后事务回滚。
BPackage newCond = new BPackage();
newCond.setName(condomName);
//...
//...
try {
em.persist(newCond);
em.flush();
} catch (ConstraintViolationException e) {
LOG.warning(e.getMessage());
return null;
}
BAssocPackage newRel = new BAssocPackage();
newRel.setPackageId(newCond); //here try to pass..
//...
//...
try {
em.persist(newRel);
} catch (ConstraintViolationException e) {
LOG.warning(e.getMessage());
return null;
}
我的EntityManager是容器管理的,所以我无法关闭它。
@Stateless
public class MainDataAccess implements MainDataAccessLocal {
@PersistenceContext(unitName = "WarmHomeColl-ejbPU")
private EntityManager em;
我的实体类中有很多属性,所以我不会发布所有属性,但这是我的第一个实体:
public class BPackage implements Serializable {
//...
//...
@OneToMany(mappedBy = "packageId")
private Collection<BAssocPackage> bAssocPackageCollection;
//...
//..
public class BAssocPackage implements Serializable {
//...
//...
@JoinColumn(name = "PACKAGE_ID", referencedColumnName = "ID")
@ManyToOne
private BPackage packageId;
//...
//..
请帮帮我。 :) 谢谢!
答案 0 :(得分:0)
解决了它。
数据库中的id字段有一个触发器,我没有被引用到正确的id ..当我从字段中删除触发器时,它开始工作正常..