【问题标题】:POJO with other POJO referencesPOJO 与其他 POJO 引用
【发布时间】:2010-01-09 20:51:29
【问题描述】:

我正在开发一个 API 来访问存储在系统中的数据。该系统包含与这些约会相关的人员、约会和程序等内容。我的应用程序将严格只读。

我正在使用带有 RowMapper 的 Spring 构建对象,例如“Person”、“Appointment”和“Procedure”。我对每个元素都有一个 DAO。 (即:PersonDAO.getById()PersonDAO.getByName()、..)。

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

所以,我想我的问题是处理这个问题的正确方法,只需将引用(ID)放入 POJO 中,然后让业务层(?)进行正确的调用以获取信息?或者是否可以在实际 POJO 中以某种方式传递对 DAO 的引用,以便我可以在引用时延迟加载对象对象?但是你如何处理循环引用呢?当我有一个Person 并且我懒惰地加载他们所有的约会时,这些约会也会有一个与之关联的人。当我加载此Person 时,它可能具有与我正在加载约会的Person 不同的信息。

Person (object x) 延迟加载 -> 约会可以延迟加载 Person (object x')。

因为 Person 在我懒洋洋地加载他们的约会时可能已经改变了。我真的需要Appointment 中的Person 对象来引用同一个Person 对象。

我正在全力以赴。我知道我可以“让它发挥作用”,但我想尝试找到一个好的解决方案。我正在考虑为此使用hibernate,但认为它真的只是矫枉过正。也许不是。

【问题讨论】:

    标签: java hibernate lazy-loading circular-reference


    【解决方案1】:

    您正在描述一个双向关联,Hibernate 对它有特定的(并且通常非常好的)支持。

    阅读文档中的how to do it

    手动滚动将非常繁琐且容易出错。我不会推荐它。使用 Hibernate 等 ORM 工具的强大功能,这就是它们的用途。

    【讨论】:

    • 谢谢。我会看看。我只需要花时间进入休眠状态。
    【解决方案2】:

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

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

    【讨论】:

    • @ManyToMany 与双向关联没有任何关系。这是一个正交的概念。
    • 你是对的。为了清楚起见,我把它放在他的具体案例中。我在想,在 Person 和 Appointment 的模型中,很多人可以属于一个约会,一个人可以有很多个约会。在这种情况下,您将在双向关系的一半上使用 @ManyToMany,在另一半上使用 @MappedBy。希望这可以解决问题。
    • 实际上,在我的具体情况下。一个约会只有一个人与之关联,但一个人可以有多个约会。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    相关资源
    最近更新 更多