gpt4 book ai didi

java - Hibernate HQL批量删除不删除连接表值

转载 作者:太空宇宙 更新时间:2023-11-04 14:04:01 25 4
gpt4 key购买 nike

我有一些 Jpa 实体:

@Entity
public class Parent{
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy(" date DESC")
List<Child> childList = new ArrayList<Child>();
private boolean enabled;

}

@Entity
public class Child{
private LocalDateTime date;
}

我想使用批量 HQL 查询删除父级和所有子级。因此,我首先加载要删除的所有父实体:

String query = "SELECT p.id FROM Parent p WHERE p.enabled=true";
TypedQuery<Long> q = entityManager.createQuery(query , Long.class);
List<Long> parentId= q.getResultList();

然后我选择要删除的所有子项

    String query = "SELECT c.id FROM Parent p JOIN p.childList c WHERE p.id=:parentId";
q = entityManager.createQuery(query , Long.class);
q.setParameter("parentId", parentId);
List<Long> childId= q.getResultList();

然后我尝试删除子实体:

     String queryDeleteChild = "DELETE FROM Child c WHERE c.id IN :childId";
q2 = entityManager.createQuery(queryDeleteChild );
q2.setParameter("childId", childId);
q2.executeUpdate();

但此时我有一个异常(exception):

     14/03/2015 11:39:38 ERROR SqlExceptionHelper:146 - Referential
integrity constraint violation: "FK_K1BX38JRPVSWUSYJP28LBYGCN:
PUBLIC.PARENT_CHILD FOREIGN KEY(CHILDLIST_ID) REFERENCES PUBLIC.CHILD(ID)
1751)"; SQL statement:
delete from Child where id in (?) [23503-186]

我无法解释为什么连接表 PARENT_CHILD 内的值没有被删除。有没有一种方法可以在不使用批量 native 查询的情况下执行此操作?

谢谢

最佳答案

由于 JPQL 批量删除 不会级联任何内容(这就是它的全部意义),所以这是可以预料的。如果您想要级联,请使用普通的 JPA remove

关于java - Hibernate HQL批量删除不删除连接表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29048106/

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