【问题标题】:SPRING HIBERNATE BEST WAY TO TRANSFER OBJECTS TO VIEWSSPRING HIBERNATE 将对象传输到视图的最佳方式
【发布时间】:2017-12-09 06:53:17
【问题描述】:

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

提前致谢 sri

【问题讨论】:

  • 使用DTO对象将数据传输到View,

标签: hibernate spring-mvc lazy-loading dto


【解决方案1】:

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

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

在 Spring 应用程序中,对划分事务的调用通常由 Spring 拦截器处理。事务通常在对 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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多