org.hibernate.LazyInitializationException: could not initialize proxy - no Session

我与影子孤独终老i 提交于 2019-11-29 13:18:59

问题


I have 2 physical servers which my web application hits managed by load balancers. I always get -

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

when one of the servers are hit while the other one runs smoothly without any problems. I have a local managed cache store enabled and managed by the application. This exception happens only while trying to access one particular column from one table. The rest of the operations work absolutely fine regardless of which server is hit.

Making lazy=false will become a performance issue because the number of rows on that table is quite large. And by the way, we are using get(object) on session instead of load(object).


回答1:


From the tags you provided, I deduce you ran into this problem using Spring Framework. I ran into the same LazyInitializationException while using a Spring Data org.springframework.data.jpa.repository.JpaRepository.

I solved the problem by annotating the method which indirectly uses Hibernate to retrieve data from the database with @Transactional.




回答2:


It sounds like the column you are trying to access is configured as an association of some sort in your entity (OneToMany, ManyToOne, whatever) and you are not populating that association in your DAO. Then, when you try to access that column (in a location in your code where there is no Hibernate Session), its not populated, Hibernate tries to load it, and boom.

Since you are in fact using the data in that association, making it EAGER sounds like something you actually would want to do. And if that table is so large, you should look at indexing it so that queries against it are efficient.




回答3:


Your object is detached. You need to re-attach it to the current session before accessing it:

session.update(object);

Also make sure you access it within a transaction

Read more about the problem/solution here




回答4:


Is that an association or property - if it is a property then the issue might be that one of the server's is running a non instrumented version.

Lazy attribute fetching: an attribute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary.


来源:https://stackoverflow.com/questions/7654818/org-hibernate-lazyinitializationexception-could-not-initialize-proxy-no-sessi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!