1

私はSpringデータを持つ簡単なSpringブートプロジェクトを作成しました。フェッチタイプLAZYは引き続きEagerロードを引き起こします。Hibernate Springデータ

タグと1対多の関係を持つタググループエンティティがあります。私はJPArepositoryを拡張し、そのfindAllメソッドを使用して、春のデータを使用しています

@Entity 
    @Table(name = "TAGS") 
    public class Tag { 

     @ManyToOne(optional = false,fetch=FetchType.LAZY) 
     @JoinColumn(name = "TAG_GROUP_ID") 
     private TagGroup tagGroup; 

    } 

以下のよう

@Entity 
@Table(name = "TAG_GROUP") 
public class TagGroup{ 

    @OneToMany(fetch=FetchType.LAZY,mappedBy = "tagGroup") 
    private Set<Tag> tagList; 

} 

タグのエンティティです。

問題、レイジーは動作しますが、それが熱望しているかのように明示的にタグリストを呼び出すことなく、また、タグリストをロードしているInfactはありませんを取得...

誰も私が間違っているのを教えてくださいすることができここに ?

+0

このオブジェクトを取得していて、LazyInitialization例外を予期しているメソッド/クラスを表示できますか? –

+0

怠惰な初期化例外を期待しているわけではありません。その動作は、怠け者でなければならないときには熱心です。私は標準のMVC構造を使用しています。 Springのデータインターフェイスは、Controllerによって呼び出されているサービスに自動実行されます。私がこれは基本的な春のブートプロジェクトと何もここに何も言った以外に。 – DragonZoned

答えて

2

これは、プロパティspring.jpa.open-in-view=trueのためです。

spring-boot-configurationごとに、スプリングブートアプリケーションはspring.jpa.open-in-view=trueを使用します。このプロパティそれ

登録OpenEntityManagerInViewInterceptorで

。 JPA EntityManagerを要求の処理全体のスレッドにバインドします。

あなたはすなわち、tagListを取得getTagList()を呼び出すときにだからあなたの場合には、その後、それはその後EntityManagerがまだ開いているようtagListをフェッチするために別のクエリを発射。

親がロードされているentityManagerがまだ開いている場合は、LazyInitializationExceptionがスローされることはありません。

これを無効にするには、application.properties/application.ymlspring.jpa.open-in-view=falseを追加してからLazyInitializationExceptionが表示されます。

+0

申し訳ありませんMadhusudana、spring.jpa.open-in-view = trueは、現行のWebリクエストに対して同じEntityManagerを保持して、私がやっていない怠惰な初期化例外を避けることです!だから、その部分を忘れてください。おそらくあなたはその質問を誤解した、私は質問を言い換えた。それをもう一度読んでください。 – DragonZoned

+1

@DragonZoned私はそれを得たと思う。したがって、tagListを**明示的に** tagListエンティティとして呼び出すことはありません。それは興味深い。 'findAll'の呼び出しが発生したときに起動するSQLクエリを投稿してください。 –

+0

@DragonZonedマッピングごとに、それは怠惰でなければなりません。私は、tagListが暗黙的に 'TagGroup'の' toString() 'と呼ばれている可能性があります。その可能性を排除するため、 'service'クラスから' findAll() 'メソッドを呼び出さなければならないと思いますので、その行の直後に' System.out.println( "Loaded Taggroup")を置くことができますか? 'findAll()'メソッドを呼び出しています。上記の 'sysout'の後にtaglistをフェッチする' select'クエリがあると、tagListの読み込みがEAGERでなく、あとで起こっている暗黙の呼び出しのbcosでないことを確かめられます。 –

関連する問題