使用Hibernate的Spring数据注入
在初始化web应用程序时,我试图将一些静态数据从DB注入bean使用Hibernate的Spring数据注入,spring,dependency-injection,Spring,Dependency Injection,在初始化web应用程序时,我试图将一些静态数据从DB注入bean <bean id="CustomDriven" class="java.util.ArrayList"> <constructor-arg> <value>#{FormCodeHibernateDAO.findAll()}</value> </constructor-arg> </bean> 我
<bean id="CustomDriven" class="java.util.ArrayList">
<constructor-arg>
<value>#{FormCodeHibernateDAO.findAll()}</value>
</constructor-arg>
</bean>
我犯了一个错误
6:48:07977信息[main][UpdateTimestampsCache]正在区域org.hibernate.cache.UpdateTimestampsCache启动更新时间戳缓存
16:48:07981信息[main][StandardQueryCache]正在区域中启动查询缓存:org.hibernate.cache.StandardQueryCache
16:48:09016调试[main][GenericDaoJpa]findAll
16:48:09017调试[main][GenericDaoJpa]正在获取HIBERNATE会话。。。
16:48:09196错误[main][GenericDaoJpa]查找所有
org.hibernate.SessionException:会话已关闭!
位于org.hibernate.impl.AbstractSessionImpl.ErrorIfClosedBStractSessionImpl.java:72
位于org.hibernate.impl.SessionImpl.setFlushModeSessionImpl.java:1433
有什么原因让我这样做吗?也许执行{formcodehbernatedao.findAll}比应用程序上下文开始连接数据库还要早,我想是的。我发现了问题,我的自定义驱动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();
}
}
如果接口中的FormCodeDAO扩展了GenericDAO实现,而不知道FormCodeHibernateDAO是什么,或者它做什么,或者它是如何做的,那么我们怎么知道呢?FormCodeHibernateDAO只是扩展了一个DAO的通用实现,它有findByName、findByCode、findAllDon不认为是这样的,我有创建drop的持久性,在日志中可以看到创建的表和填充的数据。