广告
返回顶部
首页 > 资讯 > 精选 >Hibernate Lazy加载问题怎么解决
  • 953
分享到

Hibernate Lazy加载问题怎么解决

2023-06-03 01:06:37 953人浏览 泡泡鱼
摘要

这篇文章主要讲解了“Hibernate Lazy加载问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate Lazy加载问题怎么解决”吧!Hbm文件<bean i

这篇文章主要讲解了“Hibernate Lazy加载问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate Lazy加载问题怎么解决”吧!

Hbm文件

<bean id="BookItemRepositoryImpl"
class="domain.repository.hibernate.BookItemRepositoryImpl">

<bean id="hibernateTemplate"
class="org.springframework.ORM.hibernate3.HibernateTemplate">

classpath:domain/BookItem.hbm.xml
classpath:domain/BookStore.hbm.xml

true
true
false
false

org.hibernate.dialect.oracle9Dialect


<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">

oracle.jdbc.driver.OracleDriver


jdbc:oracle:thin:@192.168.10.28:1521:VIPDBZJ

scott

tiger

Sping配置文件

最开始的时候,服务代码是这样写的

public BookItem findById(long bookItemId) {
BookItem bookItem = (BookItem) getHibernateTemplate().load(
BookItem.class, new Long(bookItemId));
return bookItem;
}

JUNIT测试代码如下

public class BookItemRepositoryTest extends TestCase {
BookItemRepository bookItemRepo=null;

protected void setUp() throws Exception {
ApplicationContext context=new
ClassPathXmlApplicationContext("spring-context.xml");
bookItemRepo=(BookItemRepository)context.getBean("BookItemRepositoryImpl");

}

public void testFindById(){
BookItem item=bookItemRepo.findById(30);
assertEquals("123456", item.getBook().getISBN());
assertEquals("QiuHongBookStore", item.getBookStore().getName());

}

}

测试运行以后报下列错误

org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
at domain.BookItem$$EnhancerByCGLIB$$2f924DDD.getBook()
at test.domain.repository.hibernate.BookItemRepositoryTest.testFindById(BookItemRepositoryTest.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

开始我在HBM文件中,把

<class name="BookItem" table="T_BookItem" lazy="true".....

然后就正常了。但是这样的代价是取消延迟加载,在load的时候直接进行加载。如果这样的话,在对象很大的时候性能会很差。于是在网上查资料。这个主要是HibernateTemplate在加载的时候,采用是lazy 加载方法,因为HibernateTemplat 在load完成后自动的关闭了Session,所以造成了LazyInitializationException异常。

我最开始将代码改成如下,也能解决这个问题。

public BookItem findById(long bookItemId) {
BookItem bookItem = (BookItem)getSession().load(
BookItem.class, new Long(bookItemId));
return bookItem;
}

但是这样改我心里面没有地,我担心会不会存在Session没有关闭或者泄漏的问题。

后来我联想如果在Spring中增加事务控制,那么HibernateTemplate是不是就不会在调用完成后马上Close Session了呢?(如果Close了Session,那事务是不是都需要Commit或RollBack了呢?,那这样的话还谈什么事务控制呢)。于是我进行了如下事务配置

<bean id="BookItemRepositoryImpl"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<bean
class="domain.repository.hibernate.BookItemRepositoryImpl">

PROPAGATION_REQUIRED

然后代码也进行了修改,执行手工加载操作。

public BookItem findById(long bookItemId) {
BookItem bookItem = (BookItem) getHibernateTemplate().load(
BookItem.class, new Long(bookItemId));

getHibernateTemplate().initialize(bookItem); // 手工加载每个对象
getHibernateTemplate().initialize(bookItem.getBook()); // 手工加载每个对象
getHibernateTemplate().initialize(bookItem.getBookStore()); //手工加载每个对象
return bookItem;
}

再进行测试就OK了!

感谢各位的阅读,以上就是“Hibernate Lazy加载问题怎么解决”的内容了,经过本文的学习后,相信大家对Hibernate Lazy加载问题怎么解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Hibernate Lazy加载问题怎么解决

本文链接: https://www.lsjlt.com/news/231967.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Hibernate Lazy加载问题怎么解决
    这篇文章主要讲解了“Hibernate Lazy加载问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate Lazy加载问题怎么解决”吧!Hbm文件<bean i...
    99+
    2023-06-03
  • Hibernate session问题怎么解决
    这篇文章主要介绍“Hibernate session问题怎么解决”,在日常操作中,相信很多人在Hibernate session问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate s...
    99+
    2023-06-17
  • Hibernate性能问题怎么解决
    本篇内容主要讲解“Hibernate性能问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate性能问题怎么解决”吧!在使用Hibernate进行分页的过程中,如果你收到如下...
    99+
    2023-06-17
  • 如何解决hibernate一对多注解懒加载失效问题
    目录hibernate一对多注解懒加载失效经排查,问题出在controller这边解决方法Hibernate懒加载异常说明及其解决懒加载异常出现的原因解决方案1解决方案2解决方案3h...
    99+
    2022-11-12
  • 怎么解决Struts Hibernate的整合问题
    这篇文章主要介绍“怎么解决Struts Hibernate的整合问题”,在日常操作中,相信很多人在怎么解决Struts Hibernate的整合问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决Str...
    99+
    2023-06-17
  • hibernate的orphanRemoval使用问题怎么解决
    在使用 Hibernate 的 orphanRemoval 属性时,可能会遇到一些问题。下面是一些常见问题的解决方法:1. 单向关联...
    99+
    2023-09-12
    hibernate
  • 怎么解决php无法加载memcache问题
    这篇文章主要讲解了“怎么解决php无法加载memcache问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决php无法加载memcache问题”吧!php无法加载memcache的解...
    99+
    2023-06-20
  • vue怎么解决首页加载慢的问题
    这篇文章主要讲解了“vue怎么解决首页加载慢的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么解决首页加载慢的问题”吧!1.路由懒加载{   &nb...
    99+
    2023-06-29
  • 怎么解决php无法加载js css问题
    本篇内容主要讲解“怎么解决php无法加载js css问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决php无法加载js css问题”吧!php无法加载js css的解决办法:1、检查加...
    99+
    2023-06-25
  • 怎么解决.cuda()加载用时很长的问题
    这篇文章主要介绍怎么解决.cuda()加载用时很长的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!方法一:pip install --upgrade --force-reinstal...
    99+
    2023-06-15
  • pytorch模型保存与加载问题怎么解决
    这篇“pytorch模型保存与加载问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“pytorch模型保存与加载问题...
    99+
    2023-07-04
  • 怎么解决css加载外部字体乱码问题
    本篇内容介绍了“怎么解决css加载外部字体乱码问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • 怎么解决php中js加载后的乱码问题
    本篇内容介绍了“怎么解决php中js加载后的乱码问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php中js加载后乱码的解决办法:1、将编...
    99+
    2023-06-25
  • 怎么解决在php7中不能加载redis的问题
    这篇文章主要讲解了“怎么解决在php7中不能加载redis的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决在php7中不能加载redis的问题”吧!具体问题描述:php7无法加载...
    99+
    2023-06-25
  • spring单元测试重复加载问题怎么解决
    在Spring单元测试中,可能会遇到重复加载的问题,即同一个bean被加载了多次。这可能会导致测试结果不准确或出现其他异常。以下是一...
    99+
    2023-08-31
    spring
  • 如何解决预加载InstantClick的问题
    这篇文章主要介绍如何解决预加载InstantClick的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在改造的时候代码高亮没法执行,准确的说是只执行一次,第二次就不执行了。所以发...
    99+
    2022-10-19
  • PyTorch加载模型model.load_state_dict()问题及解决
    目录PyTorch加载模型model.load_state_dict()问题1. 对load的模型创建新的字典2. 直接用空白''代替'module.'...
    99+
    2023-02-03
    PyTorch加载模型 model.load_state_dict() PyTorch模型
  • springboot启动不加载bootstrap.yml文件的问题怎么解决
    这篇文章主要介绍“springboot启动不加载bootstrap.yml文件的问题怎么解决”,在日常操作中,相信很多人在springboot启动不加载bootstrap.yml文件的问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简...
    99+
    2023-06-22
  • 怎么解决php验证码加载不出来的问题
    这篇文章将为大家详细讲解有关怎么解决php验证码加载不出来的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php验证码加载不出来的解决办法:1、检查验证码类和验证码字体的路径是否引入错误;2、将hea...
    99+
    2023-06-14
  • 解决jupyter加载文件失败的问题
    遇到个小白常见的问题,发现度娘里面没有记录,翻墙谷歌了下,解决问题,在此写个说明。 事情起因: 在jupyter notebook中导入文件时发生了错误: %load p2_te...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作