Java和Spring实现了事务功能

时间:2014-03-24 16:23:26

标签: java transactions spring-3

我正在使用java 1.6和spring 3.0.4,我想实现一个

的java功能
  • 计算新数据值
  • 逐个更新数据库中的现有值

如果在此步骤的任何一步中出现错误,我想回滚整个事务并返回到先前的状态。

我已经意识到所有这些代码,我只是想把它们放在一起。如何使用使用@Entity@Column注释的现有弹簧值来管理此问题?

谢谢!

2 个答案:

答案 0 :(得分:1)

简短回答:当您使用Spring时,最简单的方法是使用the transaction management,创建代表此事务处理单元的服务,并使用@Transactional

注释该方法

实际上,您需要在应用程序中配置PlatformTransactionManager。当你似乎使用JPA时,JpaTransationManager似乎是一个明显的选择。要启用@Transactional注释的处理,您可以使用@EnableTransactionManagement<tx:annotation-driven/>命名空间。两者都在@EnableTransactionManagement

的Javadoc中解释

默认情况下,从带注释的方法抛出的运行时异常将管理事务回滚。如果您的代码使用了已检查的例外,那么您必须配置注释的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
}