在视图模式中打开会话
我问这个问题,因为我选择了JPA(Hibernate实现),Spring和<在这里插入MVC框架的开发框架 - Struts 1,Struts 2,Spring MVC,Stripes...>.
我一直在思考实体层中的关系 - 例如,我有一个订单实体,它有很多订单行。我已经设置了我的应用程序,以便它热切地加载每个订单的订单行。您是否认为这是一种解决懒惰初始化问题的懒惰方法,如果我将获取策略设置为false,我会遇到这些问题?
在我看来,在检索实体及其关联时,我具有以下替代方法:
使用“在视图中打开会话”模式在每个请求上创建会话,并在返回响应之前提交事务。
实现一个 DTO(数据传输对象)层,以便我执行的每个 DAO 查询都返回正确初始化的 DTO 以实现我的目的。我不太喜欢这个选项,因为根据我的经验,我发现它创建了很多样板复制代码,并且维护起来很混乱。
不要在JPA中映射任何关联,以便我执行的每个查询只返回我感兴趣的实体 - 这可能无论如何都需要我拥有DTO,并且维护起来会很痛苦,我认为首先违背了拥有ORM的目的。
急切地获取所有(或大多数关联) - 在上面的示例中,当我检索订单时,始终获取所有订单行。
所以我的问题是,你什么时候以及在什么情况下会使用这些选项中的哪一个?你总是坚持一种方法吗?
我会问一位同事,但我认为,如果我提到“公开会议”这个词,我会被茫然的目光所吸引:(我在这里真正想要的是来自资深或非常有经验的开发人员的一些建议。
谢谢你们!