gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:08 24 4
gpt4 key购买 nike

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

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: delete from "Crypto" where "id"=?

错误:

java.sql.SQLIntegrityConstraintViolationException: ORA-02292: integrity constraint (ARTIKUA.FK_8R5C0WLWJ3LIJTVJ559EV8NAT) violated - child record found

数据库是Oracle为什么 Hibernate 在删除“Crypto”之前不删除其所有子“Values”值?

最佳答案

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

你可以做什么:

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

关于java - 违反完整性约束 (...) - 找到子记录、Java、Oracle、Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27667349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com