SPRING HIBERNATE 将对象传输到视图的最佳方式

SPRING HIBERNATE BEST WAY TO TRANSFER OBJECTS TO VIEWS

目前我在 spring mvc 中使用 fetchtype.eager 使用休眠传输对象以在 spring 视图中显示或使用 controllers.but 我的一位朋友说它增加了负载而不是使用 lazy.but 与惰性对象在 jsps 中不可用。并且无法加载子对象,如一个到多对多 e.t.c.Can 有人告诉我最好的方法(标准 spring mvc 使用服务 DAO 实现模式)来做到这一点。

提前致谢 斯里

在视图中打开会话可以解决您的问题 Java Persistence API (JPA) 允许将面向对象的模型映射到关系数据库。 JPA 是基于 Java 的对象关系映射框架的标准规范——为了使用 JPA,底层实现必须可用;最常见的选择是 Hibernate。

JPA 和 Hibernate 都支持延迟加载数据以限制对数据库发出的查询数量。一般来说,这意味着当在加载的对象上调用需要加载更多数据的方法时,数据将按需加载。为了使其工作,调用该方法的对象必须已由 JPA 加载并且是当前 运行 事务的一部分。

在 Spring 应用程序中,对划分事务的调用通常由 Spring 处理 interceptors.Transactions 通常在 Spring 托管的方法调用时启动对象并在该方法调用结束后提交。这意味着如果 JSP 页面通过调用 Spring 托管 bean 上的事务方法来请求数据,那么它只能访问已在该调用中加载的 bean 中的数据。任何可能延迟加载的数据调用都将失败,因为在该方法调用返回后对象不再附加到 JPA 事务。

Hibernate 开发人员使用 Open Session in View 设计解决了这个问题,它将活动会话(因此它是事务)与进行调用的线程相关联。在此设计中,事务将在线程完成处理请求时提交,而不是在方法调用完成时提交。这允许在 JSP 页面中加载延迟加载的数据,而不仅仅是在 Spring 托管对象中。

有关详细信息,请参阅此链接

https://vladmihalcea.com/the-open-session-in-view-anti-pattern/ http://smartkey.co.uk/development/open-session-in-view-pattern-spring-jpa/