无法通过persistance删除删除jpa子实体

时间:2017-08-01 23:47:36

标签: java hibernate jpa java-ee-7 persistent

我可以通过简单的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)

1 个答案:

答案 0 :(得分:1)

你正在删除一个城市,但是你正在做什么,国家对现在移除城市的引用?如果这是在持久性单元中,则级联持久/合并选项将使其被拾取并重新插入,从而撤消所需的删除操作。您必须先取消对该城市的任何引用,然后才能将其删除。您的JPQL可能有效,因为您没有将任何内容加载到内存中,因此Country(及其对City的引用)并不存在,因此在您提交时不会检查。虽然它有效但依赖

并不好