HibernateをSpringに統合する多くの方法の1つです...
サービス(またはDAO)クラスは次のように単純に見えるはずです:-
// annotate this class so that Spring is aware of it
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private SessionFactory sessionFactory;
// this is straight-up HQL... really, no magic here
@Override
@SuppressWarnings("unchecked")
public Collection<Employee> getAllEmployees() {
return sessionFactory.getCurrentSession()
.createQuery("from Employee e order by e.lastName, e.firstName")
.list();
}
}
ここで、を構成する必要があります。構成sessionFactory
しないと、自動配線が失敗します。だから、これはあなたがそれを設定する方法です:-
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
<!--
When creating the session factory, point it to your existing hibernate.cfg.xml.
You can also port your entire Hibernate configuration and HBM mappings here, but
for simplicity sake, I'll reference the existing hibernate.cfg.xml here so that we
are not cluttering Spring configuration file with Hibernate-specific configuration.
-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
<!-- If you are running in production, you will want to use JNDI connection -->
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/myapp"/>
<!-- If you are running testcases, you might want to use JDBC instead -->
<!--
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"/>
<property name="url" value="jdbc:jtds:sqlserver://machine/myapp"/>
<property name="username" value="myapp"/>
<property name="password" value="myapp"/>
</bean>
-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(* com.myapp..*.*(..))" advice-ref="txAdvice"/>
</aop:config>
</beans>
トランザクションを構成するには、2つの方法があります。1)@Transactional
適切なトランザクション処理を必要とするクラス(または特定のメソッド)を使用して注釈を付けることができます。2)AOPを使用して、すべてのコードをトランザクションでラップします。
com.myapp
上記の例では、すべてのコードをトランザクション付きの基本パッケージでラップしています。ポイントカットを変更(または追加)して、トランザクションラッパーを減らすことができます。