小编Ale*_*exz的帖子

懒惰的集合初始化在hibernate中失败

今天我遇到了hibernate的下一个问题:

我的方法:

@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;
}
Run Code Online (Sandbox Code Playgroud)

方法initializeIssues:

public void initializeIssues(Period period) {
    if (period.getIssues() != null) {
        Hibernate.initialize(period.getIssues());
    }
}
Run Code Online (Sandbox Code Playgroud)

如果收集包含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)
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除一些行并将方法更改为

@Transactional    
public Period getDefault(Team team) {
    Period defaultPeriod = team.getDefaultPeriod();
    _periodDAO.initializeIssues(defaultPeriod);
    return defaultPeriod;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常.

我调试了第一个示例,并且hibernate会话在整个方法期间没有关闭. …

java collections hibernate lazy-initialization

8
推荐指数
1
解决办法
2万
查看次数