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

违反完整性约束(…)-找到子记录、Java、Oracle、Hibernate,java,oracle,hibernate,Java,Oracle,Hibernate,更新加密时不需要更新值,但删除加密时删除所有子值: class Crypto { ... @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinColumn(name="cryptoId", updatable=false) private Set<Values> values; ... } class Values { ... @ManyToOne @JoinCo

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

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;
...
}
类加密{
...
@OneToMany(cascade=CascadeType.ALL,orphan=true)
@JoinColumn(name=“cryptoId”,updateable=false)
私有设定值;
...
}
阶级价值观{
...
@许多酮
@JoinColumn(name=“cryptoId”)
私有密码;
...
}
删除加密时的SQL调试:

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;
...
}
休眠:从“加密”中删除,其中“id”=

错误:

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

DB是Oracle
为什么Hibernate在删除“Crypto”之前不删除其所有子“Value”值?

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

您可以做什么:

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

  • 如何删除加密对象实例?通过HQL?session=sf.openSession();session.delete();session.close();你能粘贴完整的代码吗?奇怪的是,session.delete(crypto)并没有删除子实例。在删除之前是否加载加密对象?crypto cry=session.get(crypto.class,5);删除(哭);我使用session.delete(),但为什么需要获取所有元素?在删除加密之前,Hibernate只需要做一些类似“DELETE FROM
    Values
    WHERE
    cryptoId
    =”+Crypto.getId(),这将是一个HQL查询。我没有完全听懂。您使用的是session.delete()还是hql查询?在问题Crypto cry=session.get(Crypto.class,5)中发布完整的代码;删除(哭);