8

今日、休止状態で次の問題に直面しました。

私の方法:

@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 ) はその関連付けを失います。

それは真実ですか?他に誰が同じ問題に直面しましたか?

回答ありがとうございます。

4

1 に答える 1