我在使用 JPA 的 Toplink 实现时遇到了一个奇怪的问题。我正在编写一个独立的应用程序来管理贷款。
我定义了一个 LOAN 类,它与一个 NOTICE 类具有 OneToMany(双向)关系。我创建了一个 GUI 来显示特定贷款的所有通知。在我的程序的另一部分,我可以发送延迟通知,并将其保存为通知。但是,当我尝试显示所有贷款通知时,延迟通知没有出现。我检查了数据库并保存了一个条目,但由于某种原因,通知没有被取消。
只有当我重新启动我的应用程序时,通知才会出现。
因为我已经定义了 OneToMany 关系,所以我自己不会对数据库进行“直接”查询 - 我让 JPA 为我处理检索所有通知。
作为解决方法,我创建了一个查询来简单地获取特定贷款的所有通知。这行得通。但是,我认为通过定义两个类之间的 OneToMany 关系,这应该为我处理。好像有些东西没有正确刷新...好像正在使用“旧”通知列表而不是从数据库中刷新?
最佳答案
您如何“发送延迟通知”?需要有类似于以下的语句:
MyLoanInstance.listOfNotices.add(MyNoticeInstance);
即使你已经拥有了
MyNoticeInstance.setLoan(MyLoanInstance);
声明
如果没有该调用,您将不得不完全重新加载您正在使用的实例,或者重新启动您的应用程序。
当您修改 1 端时,Eclipselink 不会自动更新(直到重新加载所有内容)1:M 关系的 M 端的集合,如果您修改 1:M 关系的 1 端,它也不会更新引用修改M端的集合。
作为旁注,您应该考虑查看 EclipseLink,它是从 TopLink 演变而来的,您应该能够直接将 EclipseLink .jar 与 TopLink .jar 交换,即使只是为了收到一些折旧警告。
关于Java JPA OneToMany - "Many"关系不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1466054/