违反完整性约束(...) - 找到子记录,Java,Oracle,Hibernate

时间:2014-12-27 12:44:08

标签: java oracle hibernate

更新加密时我不需要更新值,但删除加密时删除所有子值:

class Crypto {
...
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name="cryptoId", updatable=false)
    private Set<Values> values;
...
}


class Values {
...
    @ManyToOne
    @JoinColumn(name = "cryptoId")
    private Crypto crypto;
...
}

删除加密时的SQL调试:

  

Hibernate:从&#34; Crypto&#34;删除在哪里&#34; id&#34; =?

错误:

  

java.sql.SQLIntegrityConstraintViolationException:ORA-02292:违反完整性约束(ARTIKUA.FK_8R5C0WLWJ3LIJTVJ559EV8NAT) - 找到子记录

DB是Oracle 为什么Hibernate,在删除&#34; Crypto&#34;之前,不要删除他们所有的孩子&#34;值&#34;值?

1 个答案:

答案 0 :(得分:1)

如果你是通过hql删除Crypto对象,hibernate不能级联删除操作。由于级联是一种休眠配置问题(即hbm.xml或注释),因此必须将数据返回到Java以进行级联处理。在HQL中执行UPDATE / DELETE行修改完全在数据库服务器上进行。

你能做什么:

  1. 获取应删除的所有Crypto实例。对于他们每个人。
  2. 调用entityManager.remove()或session.delete()。