我有以下通常运行良好的代码:
public void delete(T object)
{
EntityManager em = getPersistence().createEntityManager();
EntityTransaction et = em.getTransaction();
try
{
et.begin();
object = em.find(object.getClass(), object.getId());
em.remove(object);
em.flush();
et.commit();
}
catch(Exception e)
{
error("Unable to delete " + object.toString() + ": there are references to it.");
}
finally
{
if (et.isActive()) et.rollback();
em.close();
}
}
对于我的许多实体类,这很有效。但是,对于其中两个,它什么都不做,它不会引发任何异常,也不会删除对象。来自Hibernate的日志显示Hibernate执行了许多选择查询,但它甚至不会尝试执行删除。
我已经尝试了在这里和这里的其他类似问题中找到的建议,但无济于事(好吧,后者建议@Transactional
我不能使用,但我只是将语句括在begin()
和commit()
之间)。
我似乎找不到这两个班比其他班多(或少)什么。他们使用@PrimaryKeyJoinColumn
就像我拥有的几乎所有其他实体一样,他们有@OneToMany
和@ManyToOne
,就像ohters一样。老实说,他们确实有一个@OneToOne(可选=false)
字段,它引用了另一个类,而其他实体没有,但我不会经历更改该字段(从而更改数据库html" target="_blank">模式)的麻烦,除非你告诉我这可能是有原因的。
@OneToOne
有责任吗?还是我的删除代码有错误?
在关注聚集在一起的东西时,我遇到了同样的问题。
>
的某些子实体。它是遗留代码。
class ChildEntity {
@ManyToOne(cascade = CascadeType.ALL)
private ParentEntity parent;
}
子实体被加载到会话上下文中,然后从表中删除,而没有事务内的JPA通知(存储过程,本机sql)
然后不能删除父级。没有删除,没有异常,只是TRACE日志中的“取消计划删除”消息。
解决方案:我删除了级联属性。我很难找到哪个子实体阻止父级删除。另外,我不明白为什么如果我删除父实体,子级联会影响。
在@OneToMany
关联中将级联 = CascadeType.ALL
替换为 orphanRemoval = true
将得到预期的结果:子记录被正确删除,而无需删除父记录。
遗憾的是没有更清楚地记录错误。
在这个图中,你是否有将持久化级联回被删除的事物的关联?如果是这样的话,JPA规范明确指出,在这种情况下,提供者要取消删除。如果是这种情况,Hibernate会写出一条日志语句,说明“取消实体删除计划[...]".通过在< code > org . hibernate . event . internal . defaultpersisteventlistener 记录器上启用跟踪日志记录,您可以看到这一点。
如果是这种情况,您需要按照JPA规范的要求清理这些关联。
问题内容: 我有以下通常正常工作的代码: 对于我的许多实体类来说,这都是可行的。但是对于其中的两个它什么也不做,它不会引发任何异常,也不会删除该对象。来自hibernate的日志显示,hibernate执行了许多选择查询,但它甚至没有尝试执行删除。 我已经在这里和这里尝试了在其他类似问题中发现的建议,但是没有用(嗯,后者建议我不能使用,但是我只是在和之间加上了语句)。 我似乎找不到这两个类比其他类
我无法使用Hibernate JPA嵌入使cascase删除在Java EE容器管理的应用程序中工作。我们将不胜感激。我有一个实体‘公司',与其他实体有四个任何关系。当测试应用程序(使用Arquillian框架)时,我无法使级联删除工作;公司实体被删除,删除后子实体仍然存在。我读到了这里:JPA和Hibernate Cascade DELETE OneToMany不起作用,这可能是一个测试问题,所
问题内容: 我有两个分别以双向一对多关系存在的实体类 A 和 B。 A.java: B.java 在一个简单的控制台应用程序中,我从数据库中获取了特定的 A 行,并尝试删除其详细信息 B 行(随机),但是 JPA / Hibernate* 不仅删除了该行-甚至没有向该行发出任何 DELETE 语句。数据库。删除 B 行的唯一方法是从 A.java 的集合( LinkedHashSet )中删除相应
问题内容: 我现在急切地尝试删除涉及各种关系的实体(仅)-但是,Hibernate不会删除任何内容- 在调用所有内容后保持不变。 我有5个实体(),像这样引用所涉及的实体(): 本身具有相反的关系: (不包括ID,其他列等) 每当我打电话时, 什么都不会 发生。我添加了Hibernate SQL- Output,但是看不到执行查询的单次尝试。 由于删除可能来自ajax请求和 新的 EntityMa
我一直在阅读一篇又一篇的帖子和文章,试图让级联删除在最新的Spring Boot版本中与JPA/Hibernate配合使用。我读过你必须使用Hibernate特定的级联,我读过你不需要。我读过它们就是不起作用,但它似乎是一个混合体。我尝试过的一切都不起作用。这种关系是双向的。 不工作: 不工作: 在删除品牌之前,除了删除税率之外,还有什么其他方法有效吗? 我的测试如下所示: 参考错误: 原因:or
主要内容:JPA实体删除示例要从数据库中删除记录,可以使用接口提供方法。方法使用主键来删除特定的记录。 JPA实体删除示例 在这里,我们将演示如何根据主键删除指定学生的信息。 完整的项目代码如下所示 - 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,它包含属性:,和。 文件:StudentEntity.java 的代码如下 - 第2步: 将实体类和其他数据库配置映射到文件中。 文件:persistence.