Spring 4+springmvc+springdataJPA+hibernate 4統合怠け者ロードの問題

8423 ワード

サマリ


本文は主に「spring 4+springmvc+springdataJPA+hibernate 4統合」を解決するため、OneToMany、ManyToOneを注釈し、怠惰なロードを構成し、エラーを報告する問題を解決する.
注意:OpenEntityManagerInViewFilterは、怠惰なロードの問題を解決することができますが、sessionがオンのときにオン時間を増やすのが欠点で、一般的な内部管理システムでは問題にならないかもしれませんが、コンカレント量が大きいとパフォーマンスの問題が発生します

最初の質問

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

解決策:


WebでxmlではspringSevletの位置を設定orgを使用する.springframework.orm.jpa.support.OpenEntityManagerInViewFilter、コードは以下の通りです.
<filter>
        <filter-name>Spring OpenEntityManagerInViewFilterfilter-name>
        <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilterfilter-class>
    filter>
    <filter-mapping>
        <filter-name>Spring OpenEntityManagerInViewFilterfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>

2番目の質問

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ......., no session or session was closed

通常、タイミングタスクquartzJob、またはJunitテストで怠惰なロードで発生したエラーを使用します.

解決策:


トランザクション構成注記を追加します.junitコードは次のとおりです.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
        "file:src/main/webapp/WEB-INF/applicationContext.xml",
        "file:src/main/webapp/WEB-INF/demo-servlet.xml"})
@Transactional
public class Test {

終わります.