今天我在休眠中遇到了下一个问题:
我的方法:
@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;
}
方法初始化问题:
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 中的一个元素)具有与活动会话相关联的集合,并且存在之前的对象(defaultPeriod)也具有相同的关联 - 它(defaultPeriod)将失去其关联。
是真的吗?还有谁面临同样的问题?
谢谢你的回答。