今日、休止状態で次の問題に直面しました。
私の方法:
@Transactional
public Period getDefault(Team team) {
Period defaultPeriod = team.getDefaultPeriod();
List<Period> periods = _periodDAO.getPeriods(team);
if (!periods.contains(defaultPeriod)) {
defaultPeriod = periods.get(periods.size() - 1);
}
}
_periodDAO.initializeIssues(defaultPeriod);
return defaultPeriod;
}
メソッド initializeIssues:
public void initializeIssues(Period period) {
if (period.getIssues() != null) {
Hibernate.initialize(period.getIssues());
}
}
コレクション期間にdefaultPeriodが含まれていると例外が発生します
Caused by: org.hibernate.HibernateException: collection is not associated with any session
at org.hibernate.collection.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:474)
at org.hibernate.Hibernate.initialize(Hibernate.java:417)
しかし、いくつかの行を削除してメソッドを次のように変更すると
@Transactional
public Period getDefault(Team team) {
Period defaultPeriod = team.getDefaultPeriod();
_periodDAO.initializeIssues(defaultPeriod);
return defaultPeriod;
}
それは正常に動作します。
最初の例をデバッグしましたが、メソッド全体で休止状態セッションが閉じません。
私が理解しているように、セッションにロードされたオブジェクト ( period の1 つの要素) がアクティブなセッションに関連付けられたコレクションを持ち、オブジェクトの前に存在する ( defaultPeriod ) も同じ関連付けを持っている場合、それ ( defaultPeriod ) はその関連付けを失います。
それは真実ですか?他に誰が同じ問題に直面しましたか?
回答ありがとうございます。