2013-08-02 15 views
6

私はspring3.2.x + hibernate4.xの設定をxmlからjavaの設定に移行しようとしています。
HERESに既存のコードの抜粋:Hibernate SessionFactoryとSpring LocalSessionFactoryBean

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

春のconfigファイルの

<!-- 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; 
    } 

しかし、これは文句を言わないsessionFacotryが春のLocalSessionFactoryBeanではありませんと呼ばれるものとしてコンパイル?
これをどのように調整しますか?

+0

これはコンパイルされません。正確で完全なコンパイルエラーは何ですか? DAOを明示的に定義するのではなく、autowiringとclasspathスキャンを使用してみませんか? –

+0

コム\データ\ CONFIG \ PersistenceConfig.java:32:com.data.dao.StockDaoImplでsetSessionFactory(org.hibernate.Sessi onFactoryが)には適用できない(org.springframewor k.orm.hibernate4.LocalSessionFactoryBean) DAO .setSessionFactory(sessionFactory()); – IUnknown

答えて

9

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

だからあなただけの

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

が必要しかし、私はそのようなのDAOのexplicitelを作成しないでしょう。あなたのDAOに@Repositoryを付けるだけで、@Autowiredを使ってセッションファクトリーをオートワイヤーするだけです。 Java設定クラスに注釈が付いていることを確認してください。@ComponentScan("the.base.package.of.daos")

0

getObject()コールが返されません。
と置換すると、return sessionFactory.getObject()となります(また戻り値のタイプも変更されます)。

関連する問題