gpt4 book ai didi

java - 无法通过持久性删除来删除 jpa 子实体

转载 作者:行者123 更新时间:2023-12-02 12:26:26 25 4
gpt4 key购买 nike

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

最佳答案

您要删除一个城市,但是您如何处理该国家/地区对现已删除的城市的引用?如果它位于持久性单元中,级联持久/合并选项将导致它被拾取并重新插入,从而撤消所需的删除操作。您必须先清空对城市的任何引用,然后才能将其删除。您的 JPQL 可能会起作用,因为您没有将任何内容加载到内存中,因此国家/地区(及其对城市的引用)不存在,因此在提交时不会进行检查。虽然它有效,但依赖并不好

关于java - 无法通过持久性删除来删除 jpa 子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45449291/

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