Hibernate HQL 批量删除不删除连接 table 值
Hibernate HQL bulk delete don't remove join table values
我有一些 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;
}
我想删除 parent 和所有带有批量 HQL 查询的 child。
因此,首先我加载所有 Parent 个我想删除的实体:
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();
然后我 select 所有 child 删除
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();
然后我尝试删除 child 个实体:
String queryDeleteChild = "DELETE FROM Child c WHERE c.id IN :childId";
q2 = entityManager.createQuery(queryDeleteChild );
q2.setParameter("childId", childId);
q2.executeUpdate();
但此时我有一个例外:
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]
我无法解释为什么未删除联接 table PARENT_CHILD 中的值。
有一种方法可以不使用批量 native query?
谢谢
因为 JPQL Bulk Delete
不会级联任何东西(这就是它的全部意义),所以这是可以预料的。如果你想要级联,那么使用普通的 JPA remove
.
我有一些 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;
}
我想删除 parent 和所有带有批量 HQL 查询的 child。 因此,首先我加载所有 Parent 个我想删除的实体:
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();
然后我 select 所有 child 删除
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();
然后我尝试删除 child 个实体:
String queryDeleteChild = "DELETE FROM Child c WHERE c.id IN :childId";
q2 = entityManager.createQuery(queryDeleteChild );
q2.setParameter("childId", childId);
q2.executeUpdate();
但此时我有一个例外:
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]
我无法解释为什么未删除联接 table PARENT_CHILD 中的值。 有一种方法可以不使用批量 native query?
谢谢
因为 JPQL Bulk Delete
不会级联任何东西(这就是它的全部意义),所以这是可以预料的。如果你想要级联,那么使用普通的 JPA remove
.