11

spring3.2.x + hibernate4.x セットアップを xml から Java 構成に移動しようとしています。
既存のコードのスニペットを次に示します。

import org.hibernate.SessionFactory;
import org.hibernate.Query;
import org.hibernate.Session;

public class StockDaoImpl implements StockDao{

    private SessionFactory sessionFactory;
    public SessionFactory getSessionFactory() {
        return sessionFactory;}
    public void setSessionFactory(SessionFactory sessionFactory) {
         this.sessionFactory = sessionFactory;
    }

    public void save(Stock stock){
        Session session = getSessionFactory().openSession();
        try{
        session.save(stock);
        }
        finally{
        session.close();
        }
    }

春の設定ファイル

<!-- Stock Data Access Object -->
   <bean id="stockDao" class="com.data.dao.StockDaoImpl" >
        <property name="sessionFactory" ref="sessionFactory"></property>
   </bean> 

    <bean id="dataSource">
.....
</bean>

    <bean id="sessionFactory" 
         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

        <property name="dataSource">
          <ref bean="dataSource"/>
        </property>
        <property name="hibernateProperties">
           ......
         </property>
        <property name="mappingResources">
        .......
        </property> 
    </bean>

これは問題なく動作しますが、Java でこの構成を再定義するにはどうすればよいですか?
ここに試みがあります -

@Bean
    public StockDao stockDao() {
        StockDaoImpl dao=new StockDaoImpl();
        dao.setSessionFactory(sessionFactory());
        return dao;
    }

......
   @Bean
   public LocalSessionFactoryBean sessionFactory() {
      LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
      sessionFactory.setDataSource(restDataSource());
      sessionFactory.setPackagesToScan(new String[] { .....});
      sessionFactory.setHibernateProperties(hibernateProperties());

      return sessionFactory;
   }

しかし、sessionFactory参照されているのはSpringのLocalSessionFactoryBeanではないため、これはコンパイルされませんか?

どうすればこれを調整できますか?

4

3 に答える 3

15

LocalSessionFactoryBean はFactoryBean<SessionFactory>. これは、SessionFactory のインスタンスを作成できることを意味します。

だからあなたはただ必要です

public StockDao stockDao() {
    StockDaoImpl dao=new StockDaoImpl();
    dao.setSessionFactory(sessionFactory().getObject());
    return dao;
}

しかし、私はそのような明示的な DAO を作成しません。DAO に @Repository のアノテーションを付け、@Autowired を使用してセッション ファクトリをオートワイヤーするだけです。Java構成クラスに注釈が付けられていることを確認してください@ComponentScan("the.base.package.of.daos")

于 2013-08-02T08:34:14.807 に答える
0

返される getObject() 呼び出しがありません。
で代用しreturn sessionFactory.getObject()ます(そして戻り値の型も変更してください!)

于 2013-08-02T08:29:42.290 に答える