我发现了一些非常特殊的东西。当我使用注释时
SELECT * FROM cities WHERE name != 'New York' and name IN ('Berlin', 'Bonn', 'Munchen');
和
@OneToMany(fetch = FetchType.EAGER, mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true)
List<LeaveQuery> leaveQueryList;
我无法再从数据库中删除LeaveQuery。当我将两侧的FetchType.EAGER更改为LAZY时,它会成功删除,但我需要双方都使用FetchType.EAGER。
有没有人有解决方法呢?
此致
编辑:
继承我的删除代码:
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "FK_account", nullable = true)
private Account account;
答案 0 :(得分:0)
我找到了问题的原因
如果该对象仍然在父对象的子对象列表中(如果是我的情况下为Account,leaveQuery是leaveQuerylist中的子对象),则Hibernate不会删除子对象,如果该父对象仍然在hibernate的持久化上下文。所以我通过应用此代码解决了我的问题。
deleteLeaveQuery.getAccount().getLeaveQueryList().removeIf(a-> a.getId() == custId);
从Account中的LeaveQuery列表中删除了我要删除的leaveQuery后,我能够成功删除。
删除leaveQuery的另一种方法是首先获取与此leaveQuery相关联的帐户,然后从LeaveQueryList中删除leaveQuery,然后保存该帐户。如果Account在其OneToMany注释中具有CascadeType.ALL,它将自动从数据库中删除从列表中删除的leavequery。