簡體   English   中英

Java和Spring實現事務功能

[英]Java and Spring implement transactional function

我正在使用Java 1.6和Spring 3.0.4,我想實現一個Java功能

  • 計算新數據值
  • 一對一更新數據庫中的現有值

如果在任何此步驟中出現錯誤,我都希望回滾整個事務並返回到先前的狀態。

我已經意識到了所有這些代碼,我只想將它們放在一起。 如何使用與@Entity@Column批注一起使用的現有spring值來管理此問題?

謝謝!

簡短的答案:使用Spring時,最簡單的方法是使用事務管理 ,創建一個代表該事務單元的服務,並使用@Transactional對該方法進行注釋

實際上,您需要在應用程序中配置PlatformTransactionManager 當您似乎使用JPA時, JpaTransationManager似乎是一個顯而易見的選擇。 要啟用@Transactional批注的處理,可以使用@EnableTransactionManagement<tx:annotation-driven/>命名空間。 兩者都在@EnableTransactionManagement的Javadoc中進行了@EnableTransactionManagement

默認情況下,從該帶注釋的方法引發的運行時異常將管理事務回滾。 如果您的代碼正在使用檢查的異常,則必須配置注釋的rollbackFor屬性。

文檔中有更多詳細信息和示例

對於需要相同配置的人們,您可以在這里找到我如何解決此問題,將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
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM