2012-05-10 8 views
0

Webアプリケーションの初期化時に、DBから静的なデータをBeanに注入しようとしています。Hibernateを使用したSpringのデータ注入

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

Iは

6エラー得る:48:07977 INFO [メイン] [UpdateTimestampsCache出発更新タイムスタンプ領域でのキャッシュ:org.hibernate.cache.UpdateTimestampsCache 16:48:07981 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エラー[main] [GenericDaoJpa]すべてを見つけるときにエラーが発生する org.hibernate.SessionException:セッションが閉じられています! org.hibernate.impl.AbstractSessionImpl.errorIfClosedで org.hibernate.impl.SessionImpl.setFlushModeで(AbstractSessionImpl.java:72) (SessionImpl.java:1433)

私はこれを取得していますなぜ任意の理由は?

+1

'FormCodeHibernateDAO'が何であるか、何をしているのか、どのようにしているのかわからないと、どうやって知ることができますか? – skaffman

+0

FormCodeHibernateDAOは、findByName、findByCode、findAllを持つDAOの汎用実装を拡張しています。 – 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(); 
    } 
} 
です

GenericDAO実装を拡張したインタフェースのFormCodeDAO

0

多分#{FormCodeHibernateDAO.findAll()}の実行はアプリケーションコンテキストのデータベースへの接続開始より前であると思います。

+0

このようなケースは考えていません。作成するドロップが残っており、ログにはテーブルが作成され、データが格納されています。 – Vivek

関連する問題