1
10
看看这个 answer 基本上,JPA规范要求,如果持久化操作被应用于被移除的实体,则该实体将再次被管理。
要验证这是否真的发生,请启用跟踪日志级别
为了避免任何不可预测的行为,建议从加载同一会话/事务的所有其他实体实例中删除对已删除实体的引用。 |
2
0
我有这个问题。 即使启用了show_sql:
没有输出,remove命令被默默忽略。 问题围绕一对多关系,其中: 待办事项1---*待办事项 环境是: -JSF语言 -Wildfly 18(JPA默认实现-Hibernate) -PostgreSQL 10 尝试删除任何一侧的实例都会以静默方式失败,而在服务器的输出上没有相应的“delete”命令,也没有任何类型的异常消息。 解决方案 首先,我将Wildfly18/JBoss文档在其示例中建议的多方代码从:
等效形式:
不幸的是,我得到了同样的结果——删除被默默忽略。 然后,我怀疑数据库,因为hibernate处理自己的密钥。我在实施过程中做了很多测试。。。 为了确定一致性问题,我决定清空数据库,删除关系双方的内容。 然后,我使用应用程序的资源(没有SQL命令)创建了新的实体实例和关系,因为除了实体删除之外,其他工作都很顺利。 之后,我使用SQL命令检查了数据库关系,以确保一切正常。 接下来,我再次尝试了一个新的测试,但这次成功了。 然后我恢复了代码,取消注释注释的代码,反之亦然,并再次测试。 测试再次失败,返回相同的结果,忽略删除。 我再次将代码设置为先前的条件测试,以确认结果。 确认是成功的,确认了对两个问题的怀疑,即数据库和代码实现。 由于好消息,我在“One”一方重复了同样的内容(下面的代码-注释代码是从Wildfly 18文档继承的初始代码,如上所述)。 发件人:
收件人:
再次重复测试,但这次不是删除Todoitem实例(“多”侧),而是删除Todo实例(“一”侧)。 问题已解决。成功 重要提示: 直接在数据库上使用SQL语句检查删除测试。 有时,由于缓存问题或代码实现错误,实例似乎没有被删除,需要分开处理。 |
dvelopp · hibernate中@EmbeddedId内级联 7 年前 |
Pratap · 在JPQL中将整数转换为字符串 7 年前 |
Setix · JPA 2.0数据对于列表中的列太长 7 年前 |
Maksim Gumerov · 默默忽略remove() 9 年前 |
AlanObject · 我可以将JPA集合缩放多远(地图或列表) 9 年前 |