我使用 Struts 作为前端,使用 Spring 作为 IOC,使用 hibernate + c3p0 作为数据源池。我正在为我的持久层使用 annotationsessionfactory bean 和 @Transaction 注释。所有这些都是使用 spring bean 管理的。
但是如果我不在持久层方法上使用@transactional 注释,我的数据也会被保存。
例子:
public interface CollegeHibernate {
CollegeWTO saveCollege(CollegeWTO collegeWTO);
}
public class CollegeHibernateImpl extends HibernateTemplate implements CollegeHibernate{
public CollegeWTO saveCollege(CollegeWTO collegeWTO) {
College college = CollegeHelper.CollegeWTO_to_Model(new College(), collegeWTO);
}
}
豆是
<bean id="collegeHibernate" class="com.velos.p1b.persistence.college.impl.CollegeHibernateImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
会话工厂是弹簧注释工厂,事务是这样管理的。
<tx:annotation-driven transaction-manager="transactionManager" />
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" read-only="true" rollback-for="java.lang.Throwable" />
</tx:attributes>
</tx:advice>
这种方法可以保存数据,但我根本不让它成为事务性的。据我说,它必须通过异常。我正在使用 oracle 11g 和 j-boss 4.2 服务器。我在想的是我的交易没有得到管理。任何例子都值得赞赏。