2012-05-10 217 views
0

在初始化Web應用程序時,我試圖從DB注入一些靜態數據到bean中。使用休眠彈簧注入數據

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

我得到一個錯誤

6:48:org.hibernate.cache.UpdateTimestampsCache 16:07977 INFO [主要] [UpdateTimestampsCache]開始更新在區域高速緩存中的時間戳48:07981 INFO [main] [StandardQueryCache]在地區啓動查詢緩存:org.hibernate.cache.StandardQueryCache 16:48:09,016 DEBUG [main] [GenericDaoJpa] findAll() 16:48:09,017 DEBUG [main] [GenericDaoJpa] getting HIBERNATE會話... 16:48:09,196錯誤[main] [GenericDaoJpa]找到全部時出錯 org.hibernate.SessionException:Session關閉! 在org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72) 在org.hibernate.impl.SessionImpl.setFlushMode(SessionImpl.java:1433)

任何原因,我得到這個?

+1

不知道「FormCodeHibernateDAO」是什麼,或者它做了什麼,或者它是如何做的,那我們怎麼知道? – skaffman

+0

FormCodeHibernateDAO只是擴展了一個DAO的泛型實現,它具有findByName,findByCode,findAll – Vivek

回答

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(); 
    } 
} 

其中FormCodeDAO在擴展GenericDAO實現的接口

0

也許執行#{FormCodeHibernateDAO.findAll()}比應用程序上下文開始連接數據庫之前,我想是的。

+0

不要認爲是這種情況,我有持久性創建drop,並在日誌中看到創建的表和數據填充的表。 – Vivek