POJO与其他POJO参考

时间:2010-01-09 20:51:29

标签: java hibernate lazy-loading circular-reference

我正在使用API​​来访问存储在系统中的数据。系统包含与这些约会相关的人员,约会和程序。我的申请将严格为只读。

我正在使用Spring w / RowMapper来构建诸如“Person”,“Appointment”和“Procedure”之类的对象。我为每个元素都有一个DAO。 (即:PersonDAO.getById()PersonDAO.getByName(),..)。

问题在于Appointment引用了Person对象。在Person对象中引用Person的约会是很好的,但如果我开始加载这些约会,它将成为循环引用。

所以,我想我的问题是处理这个问题的正确方法只是将引用(Ids)放在POJO中然后让业务层(?)只是做出正确的调用来获取信息?或者是否可以以某种方式传递实际POJO中对DAO的引用,以便在引用时可以懒惰地加载对象对象?但那么你如何处理循环引用?当我有一个Person并且我懒洋洋地加载他们的所有约会时,这些约会也会有一个与他们相关联的人。当我加载此Person时,它可能会有Person我正在加载约会的差异信息。

Person(对象x)懒惰加载 - >约会可能会懒惰地加载Person(对象x')。

因为{懒惰地加载约会时Person可能已经改变了。我真的需要Person中的Appointment对象来引用相同的Person对象。

我对此感到高兴。我知道我可以“让它成功”,但我想尝试找到一个好的解决方案。我正在考虑使用hibernate,但是认为这真的太过分了。也许不是。

2 个答案:

答案 0 :(得分:2)

您正在描述一种双向关联,Hibernate具有特定(通常非常好)的支持。

阅读文档中的how to do it

手动滚动这将是非常繁琐且容易出错的。我不推荐它。使用像Hibernate这样的ORM工具的强大功能,这就是他们所需要的。

答案 1 :(得分:0)

扩展使用Hibernate的建议,我建议查看Hibernate支持的JPA注释支持(我相信它是J2EE规范的一部分)。您可以使用@ManyToMany批注对类进行批注。看看这些文档:

https://www.hibernate.org/397.html