【发布时间】:2010-12-23 06:05:12
【问题描述】:
鉴于我选择的 JPA(Hibernate 实现)、Spring 和 的开发框架,我问这个问题。
我一直在思考我的实体层中的关系——例如,我有一个包含许多订单行的订单实体。我已经设置了我的应用程序,以便它急切地加载每个订单的订单行。如果我将 fetch 策略设置为 false,您是否认为这是一种解决延迟初始化问题的懒惰方法?
在我看来,在检索实体及其关联时,我有以下选择:
使用 Open Session In View 模式在每个请求上创建会话并在返回响应之前提交事务。
实现一个 DTO(数据传输对象)层,以便我执行的每个 DAO 查询都返回正确初始化的 DTO。我不太喜欢这个选项,因为根据我的经验,我发现它会创建大量的样板复制代码并且变得难以维护。
不要在 JPA 中映射任何关联,以便我执行的每个查询只返回我感兴趣的实体 - 这可能需要我拥有 DTO 并且维护起来很痛苦,我认为失败首先拥有 ORM 的目的。
急切地获取所有(或大多数关联) - 在上面的示例中,当我检索订单时始终获取所有订单行。
所以我的问题是,您会在什么时候以及在什么情况下使用这些选项中的哪一个?你总是坚持一种方式吗?
我会问一位同事,但我认为,如果我什至提到“Open Session in View”这个词,我会被空白的目光打招呼:(我在这里真正想要的是来自资深或非常有经验的一些建议开发者。
谢谢大家!
【问题讨论】:
标签: java design-patterns session orm