SPRING HIBERNATE将对象转移到视图的最佳方式

问题描述 投票:0回答:1

目前我在spring mvc中使用fetchtype.eager使用hibernate传输对象以显示或在spring视图和控制器中使用。但是我的一个朋友说它增加了负载而不是使用lazy.but与懒惰的对象不可用jsps。并且无法加载像对象那样的子对象,以及很多很多等等。有人可以告诉我最好的方法(使用服务DAO实现模式的标准spring mvc)来做到这一点。

在此先感谢sri

hibernate spring-mvc lazy-loading dto
1个回答
1
投票

View中的Open Session解决了您的问题Java Persistence API(JPA)允许将面向对象的模型映射到关系数据库。 JPA是基于Java的对象关系映射框架的标准规范 - 为了使用JPA,必须提供底层实现;最常见的选择是Hibernate。

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

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

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

有关更多信息,请参阅此链接

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

© www.soinside.com 2019 - 2024. All rights reserved.