リンクテーブルに追加の列と多対多の関係があります。私は、所有側が子どもたちを熱心に取り出すように(つまり私はLazyInitializationException
を得ていない)、反対方向には怠け者であるように設定しました。これは機能します。@Transactional(readOnly = true)はLazyInitializationExceptionにつながります。
だけ@Transactional
DAOとサービスクラスのクラスレベルのがあった前に、私は今、(微調整をするために、トランザクションに望んでいた私はreadOnly = true
にメソッドgetById
を設定します。
@Transactional(readOnly = true)
public Compound getById(Long id) {
return compoundDAO.getById(id);
}
この変更の後、私は中LazyInitializationException
を取得次のスニペット:
Compound compound = compoundService.getById(6L);
Structure structure = compound.getComposition().get(0).getStructure();
System.out.println("StructureId: "+ structure.getId()); // LazyInitializationException
私は誰もが、この動作を説明することができ、これは動作します(readOnly = true)
を削除した場合、私は、なぜ番目のいずれかの理由が表示されないよう、私は混乱の春+休止状態の種類を使用!?。どのデータが読み込まれるかに影響するでしょうか?
EDIT:関係定義の
スニペット。これはリンクテーブルの列を持つ多対多です。
所有側(例えば化合物は、構造が含まれています):
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.structure",
cascade = CascadeType.ALL)
@OrderBy("pk.compound.id ASC")
private List<CompoundComposition> occurence;
多対一の@Embeddable IDクラス
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
public Compound getCompound() {
return compound;
}
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
public Structure getStructure() {
return structure;
}
EDIT 2:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.compound",
cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy("pk.structure.id ASC")
private List<CompoundComposition> composition = new ArrayList<>();
は左右に属し:
St ACKトレース
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:272) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
at org.bitbucket.myName.myApp.entity.Structure_$$_javassist_0.getId(Structure_$$_javassist_0.java) ~[classes/:na]
at org.bitbucket.myName.myApp.App.main(App.java:31) ~[classes/:na]
EDIT 3:
ログインが読み取り専用と非常に異なっており、一部の関係は例えば、ロードされた欠落しています。
はまた、私のコメントを参照してください。いくつかの選択肢がログにありません。
EDIT 4:基本的なDriverManagerDataSourceなし接続プールと
だから私は疲れました。問題はまったく同じです。私にとっては、Hibernateの問題のように見えます。遅延ロードがトランザクション内で起こるように
クラスレベルのトランザクション定義とは何ですか? –
@Transactionalだけです。 –
モデルクラスのスニペットを投稿できますか? DAOクラスのトップに '@ Transactional'アノテーションがありますか? – sbzoom