数据库Java JPA OneToMany“多”关系不刷新
我在使用JPA的Toplink实现时遇到了一个奇怪的问题。我正在写一个独立的应用程序来管理贷款
我定义了一个贷款类,它与通知类具有一对一(双向)关系。我创建了一个GUI来显示特定贷款的所有通知。在我的程序的另一部分,我可以发送延迟通知,并将其保存为通知。但是,当我试图显示贷款的所有通知时,延迟通知不会出现。我已经检查了数据库,并保存了一个条目,但由于某种原因,通知没有被删除
只有当我重新启动应用程序时,才会出现通知
因为我已经定义了一个OneToMany关系,所以我自己并没有对数据库进行“直接”查询——我让JPA为我检索所有通知
作为修复,我创建了一个查询,以简单地获取特定贷款的所有通知。这很有效。然而,我认为通过定义两个类之间的OneToMany关系,这应该由我来处理。似乎有些东西没有被正确刷新。。。好像是在使用“较旧”的通知列表,而不是从数据库中刷新
# 1 楼答案
你是如何“发送延迟通知”的?需要有一个类似于以下内容的声明:
即使你已经有了
声明
如果没有该调用,则必须完全重新加载正在使用的实例,或者重新启动应用程序
修改1:M关系的1侧时,Eclipselink不会自动更新(直到重新加载所有内容)1:M关系的M侧的集合,如果修改M侧的集合,Eclipselink也不会更新1:M关系的1侧的引用
作为一个旁注,你应该考虑签出EclipseLink,它是由TopLink演变而来的,你应该能够直接交换Eclipse。与顶部链接的jar。jar,如果只是收到一些折旧警告的话Eclipse Link
# 2 楼答案
在您坚持通知后,您是否尝试对您的实体经理进行刷新? [entityManager.flush()]
# 3 楼答案
我想是这样的
你说过
可能您有两个EntityManager实例(一个用于程序的每个部分),因此不会显示最后保存的通知,因为两个EntityManager不共享相同的持久性上下文(一个不知道另一个中发生的更改)。您可以做的是清除持久性上下文,然后按如下方式再次检索它
在您的计划的另一部分(在坚持您的通知后)呼叫
当你想重新获得贷款和通知时
检查一下,告诉我它是否工作正常
问候,