我正在使用java 1.6和spring 3.0.4,我想实现一个
的java功能如果在此步骤的任何一步中出现错误,我想回滚整个事务并返回到先前的状态。
我已经意识到所有这些代码,我只是想把它们放在一起。如何使用使用@Entity
和@Column
注释的现有弹簧值来管理此问题?
谢谢!
答案 0 :(得分:1)
简短回答:当您使用Spring时,最简单的方法是使用the transaction management,创建代表此事务处理单元的服务,并使用@Transactional
实际上,您需要在应用程序中配置PlatformTransactionManager
。当你似乎使用JPA时,JpaTransationManager
似乎是一个明显的选择。要启用@Transactional
注释的处理,您可以使用@EnableTransactionManagement
或<tx:annotation-driven/>
命名空间。两者都在@EnableTransactionManagement
默认情况下,从带注释的方法抛出的运行时异常将管理事务回滚。如果您的代码使用了已检查的例外,那么您必须配置注释的rollbackFor
属性。
有更多详细信息和示例in the documentation
答案 1 :(得分:0)
对于需要相同配置的人,在这里你可以找到我如何解决这个问题,将Hibernate与Spring集成。
<!-- session factory activate the transaction modules for the specified classes -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="configLocation" value="classpath:config-hibernate.xml" />
<property name="packagesToScan">
<list>
<!-- Additional packages required to be added if entities located elsewhere -->
<value>com.some.package.dao</value>
<value>com.some.package.model</value>
<value>com.some.package.SpecificClass</value>
</list>
</property>
<property name="mappingResources" ref="mappingResources"/>
<bean id="mappingResources" class="org.springframework.beans.factory.config.ListFactoryBean">
<property name="sourceList">
<list>
<!-- here you can add your hibernate mapping query that you want to use on transaction -->
<value>config-hibernate-mapping.xml</value>
</list>
</property>
</bean>
<!-- This will activate transactional annotation -->
<tx:annotation-driven transaction-manager="transactionManager" />
@Service
@Transactional
public class SpecificClass {
// write your method, everyone of them will be transactional
// and there will be a commit in case of success or rollback in case of exception
}