Java持久性 - 刷新后没有找到密钥

时间:2015-05-07 13:43:19

标签: java jpa persistence

我有两个实体对象代表两个数据库表。

表中的两个字段之间存在外键关系..

我尝试从一个实体创建一个新实例并持久化,然后尝试创建另一个实例并将第一个对象作为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;
//...
 //..

请帮帮我。 :) 谢谢!

1 个答案:

答案 0 :(得分:0)

解决了它。

数据库中的id字段有一个触发器,我没有被引用到正确的id ..当我从字段中删除触发器时,它开始工作正常..