0

Web アプリの初期化時に、DB から 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

私は問題を理解しました.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 に答える
0

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

于 2012-05-10T16:04:19.387 に答える