繁体   English   中英

在Spring MVC应用程序中正确使用getHibernateTemplate()?

[英]Proper use of getHibernateTemplate() in Spring MVC app?

我的Spring MVC应用程序中有一堆Hibernate映射对象。 默认似乎是对具有关系的嵌套对象的延迟加载。 我在访问例如子对象列表时在JSP中遇到很多错误,从而实现了这一点。

因此,我实现了第二种方法来获取已初始化所有子对象的对象列表。 我想知道是否有人可以给我一些反馈?

这是我的DAO实现中的有效代码:

public List<Address> getTripListFullyInitliazed() {

    HibernateTemplate template = getHibernateTemplate();

    List<Address> addresses = template.loadAll(Address.class);
    for (Address address : address) {
        template.initialize(address.getChildren());
    }
    return addresses;   
}

有人可以告诉我是否可以这样做还是应该更改某些内容?

我认为一种更优雅的方法是使用HQL JOIN FETCH子句,因为它可以减少发出的SQL查询的数量,并使您的代码更清晰:

public List<Address> getTripListFullyInitliazed() {
    return getHibernateTemplate().find(
        "from Address a left join fetch a.children");
}

也可以看看:

我认为针对此问题的标准解决方案是使用OpenSessionInViewFilter

Servlet 2.3过滤器,它将Hibernate Session绑定到线程以完成请求的整个处理。 旨在用于“在视图中打开会话”模式,即尽管原始事务已经完成,但允许在Web视图中进行延迟加载。

该过滤器通过当前线程使Hibernate Sessions可用,它将由事务管理器自动检测到。 它适用于通过HibernateTransactionManagerJtaTransactionManager进行的服务层事务,也适用于非事务执行(如果配置正确)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM