0

在初始化网络应用程序时,我试图将一些静态数据从数据库注入到 bean 中。

<bean id="CustomDriven" class="java.util.ArrayList">
        <constructor-arg>
            <value>#{FormCodeHibernateDAO.findAll()}</value>
        </constructor-arg>
    </bean>

我收到一个错误

6:48:07,977 INFO [main] [UpdateTimestampsCache] 在区域开始更新时间戳缓存:org.hibernate.cache.UpdateTimestampsCache 16:48:07,981 INFO [main] [StandardQueryCache] 在区域开始查询缓存:org.hibernate.cache。 StandardQueryCache 16:48:09,016 DEBUG [main] [GenericDaoJpa] findAll() 16:48:09,017 DEBUG [main] [GenericDaoJpa] 获取 HIBERNATE 会话... 16:48:09,196 ERROR [main] [GenericDaoJpa] 查找所有错误时org.hibernate.SessionException:会话已关闭!在 org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72) 在 org.hibernate.impl.SessionImpl.setFlushMode(SessionImpl.java:1433)

有什么理由让我得到这个?

4

2 回答 2

0

也许#{FormCodeHibernateDAO.findAll()} 的执行是在应用程序上下文开始连接到数据库之前,我想是的。

于 2012-05-10T16:04:19.387 回答
0

我发现了问题,我的 CustomDriven bean 直接与 DAO Impl 对话。

我将其更改为使用服务与 DAO 对话,新配置看起来像

<bean id="CustomDriven" class="java.util.ArrayList">
        <constructor-arg>
            <value>#{dataDrivenService.getDataList()}</value>
        </constructor-arg>
    </bean>

DataDriverService 类是

public interface DataDrivenService<T> {

    public List<T> getDataList();
 }

ServiceImpl 是

@Service( value = "dataDrivenService" )
public class DataDrivenServiceImpl implements DataDrivenService {

    @Autowired
    @Qualifier( value = "formCodeDAO" )
    private FormCodeDAO dao;

    @Override
    @Transactional( readOnly = true )
    public List<FormCode> getDataList() {
        return dao.findAll();
    }
}

扩展 GenericDAO 实现的接口中的 FormCodeDAO

于 2012-05-11T11:05:03.430 回答