我可以通过简单的HQL删除任何行,如
Query q = em.createQuery("DELETE FROM Cities WHERE id = :id");
但我想删除它
Cities city = em.getReference(Cities.class, 8);
try {
em.getTransaction().begin();
em.remove(city);
em.getTransaction().commit();
}
catch(RuntimeException e) {
e.printStackTrace();
em.getTransaction().rollback();
}
我没有任何警告或错误
模型很简单
国家/地区(仅限OneToMany注释)
@OneToMany(mappedBy = "country", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
private List<Cities> cities;
城市(仅限fk字段)
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "country_id", nullable = false)
private Countries country;
我正在尝试的事情是:
1) trying to apply orphanRemoval = true
2) cascade = CascadeType.MERGE to Cities
3) em.refresh(city)
答案 0 :(得分:1)
你正在删除一个城市,但是你正在做什么,国家对现在移除城市的引用?如果这是在持久性单元中,则级联持久/合并选项将使其被拾取并重新插入,从而撤消所需的删除操作。您必须先取消对该城市的任何引用,然后才能将其删除。您的JPQL可能有效,因为您没有将任何内容加载到内存中,因此Country(及其对City的引用)并不存在,因此在您提交时不会检查。虽然它有效但依赖
并不好