1

Spring 3.0.5、Hibernate 3.3、generic-hibernate-dao を使用しています。以下のように Hibernate SessionFactory を構成しました。

<bean id="sessionFactory"   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean?"> 
    <property name="dataSource">
        <ref local="dataSource" /> 
    </property> 
<property name="packagesToScan" value="com.xxx.re.admin.model" /> <property name="hibernateProperties">

        <props>
            <prop key="hibernate.dialect">
                org.hibernate.dialect.MySQLDialect 
            </prop> 
            <prop key="hibernate.show_sql">false</prop> 
            <prop key="hibernate.hbm2ddl.auto">validate</prop> 
        </props> 
    </property> 
</bean> 

<!-- Transaction manager for a single Hibernate SessionFactory? (alternative
    to JTA) --> 
<tx:annotation-driven /> 

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager?"> 
    <property name="sessionFactory">
        <ref local="sessionFactory" /> 
    </property> 
</bean> 

BaseDAOImpl を作成し、以下のようにドメイン DAO で拡張しました。

public class BaseDAOImpl<T, ID extends Serializable> extends GenericDAOImpl<T, ID> {
    @Autowired @Override public void setSessionFactory(SessionFactory? sessionFactory) {
        super.setSessionFactory(sessionFactory); 
    } 
}

@Repository public class LocaleDAOImpl extends BaseDAOImpl<Locale, Long> implements LocaleDAO {

}

スプリング コントローラーにアクセスすると (を呼び出してdao.findAll())、次のエラーが発生します。

org.hibernate.HibernateException?: 
No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here.
4

1 に答える 1

0

コントローラに注釈を付けます@Transactional(または、コントローラとDAOの中間である場合は何らかのサービス)。サービスは実際にはより良い場所です。そうでない場合は<tx:annotation-driven />*-servlet.xmlMVC構成ファイルにも配置する必要があります。

私はこのライブラリを使用したことがありません(私はSpringポートフォリオのSpring Data JPAを個人的に使用しています)が、ドキュメントにはトランザクションについて何も記載されていないため、トランザクションを構成するのはユーザー次第だと思います。

更新:彼らが提供する例を見ると、私は正しいようです:

@Transactional
public class CitizenServiceImpl implements CitizenService {
//...

http://code.google.com/p/hibernate-generic-dao/source/browse/trunk/sample/jpa-hibernate-maven/src/main/java/sample/googlecode/genericdao/service/CitizenServiceImpl.java? r = 635

于 2011-10-30T11:11:21.257 に答える