2009-11-26 70 views

回答

4

確保這個語句的執行時,你有一個活躍的交易。如果您使用JPA,請使用EntityManager.getTransaction()。begin()。這假設您在JTA事務範圍外使用JPA。

如果您正在使用JTA容器內的應用程序支持,您還可以使用JTA UserTransaction的管理事務。

1

請確保您的處理程序方法聲明爲public

@Transactional 
@RequestMapping('/test') 
public String doTest() { 
    // do your stuff here 
    return 'testview'; 
} 
+0

好抓bro!.. –

0

確保您的Spring配置包括以下行:

<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />

mode可以是代理aspectjtransaction-manager必須指向您的交易經理一直在。

0

對於JBoss 4.0和Hibernate,我通過添加一些事務管理器的屬性我EntityManagerFactoryBean定義固定的這個問題:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="xaDs" /> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory 
      </prop> 
      <prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup 
      </prop> 
     </props> 
    </property> 

我發現soluton on this message board thread。春天有缺陷,不能與@Transactional註釋維護交易如果同一類有@Service註釋的方式:

14

遇到這個問題我自己,花了幾個小時的努力得到它解決了我終於找到了原因後,它自動裝配。

一旦從有關的服務類中刪除了@Service註釋,以及相應的Bean是在XML配置聲明:

<bean id="myService" class="com.example.myapp.service.MyServiceImpl" /> 

問題了。

檢查這個JIRA bug瞭解更多詳情。

+4

說這是一個錯誤並不完全正確,你給出的鏈接已經給出了很好的解釋,爲什麼會發生這種情況 - Service類在appContext.xml和spring-servlet.xml中被實例化爲一個bean。它只能在appContext.xml中獲得'bean',否則它將不具有事務支持。 –

+0

@HarshalWaghmare你兩次保存了我的底部。我兩次遇到同樣的錯誤,並急切地想再次找到您的評論:D。最後,歡呼。告訴servlet-context只是爲了掃描控制器..一切都像魅力一樣。 – Aubergine

3

我的問題是與辦法做到,我設置了<tx:annotation-driven/>元素在我的上下文定義 -

我原本加載時間啓用編織(不knownley)讀取<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>並通過簡單地移除第二屬性 - 一切工作(但需要2小時的頭撞)。我相信,第二個元素涉及@Configurable sterotype但可以讓其他(聰明)的人解釋這一差別&爲什麼一個會工作&其他則沒有..希望這有助於...

工作定義= <tx:annotation-driven transaction-manager="transactionManager"/>

0

我做了以下所有事情。我的問題是「import」標籤,有幾個上下文根,比如servlet-context和root-context,它們並不相互依賴。在STS中,Spring Explorer視圖變得清晰。沒有適用於Tomcat的JTA。

我的建議是普遍的:在您的環境中運行寵物診所,How to run Spring 3.0 PetClinic in tomcat with Hibernate backed JPA 或應用程序的Roo的存根產生,並嘗試你的configs與參考比較。

0

我終於加入

<tx:annotation-driven mode="aspectj" transaction-manager="yourTransactionManager" /> 

到我的應用程序的context.xml

+0

你的回答與伊恩的答案相矛盾。他刪除了mode =「aspectj」參數。 – Brain

2

確保這個語句的執行時,你有一個活躍的交易固定的這個錯誤。如果您使用的是JPA,請使用EntityManager.getTransaction().begin()。這假設您在JTA事務範圍外使用JPA。

2

我遇到了這個問題,只需在方法上添加@Transacctional註釋,並在類中添加@Service註釋。

例如:

@Service 
@Transactional 
public class MyService { 

} 
+0

該類的@Transactional註解解決了我的問題。 – pablosaraiva

1

彈簧4.3.1 /休眠4.2.21

我的配置是一個沒有休眠或彈簧XML文檔100%的Java代碼(例如context.xml中,persistence.xml中等等)。問題是我正在傳遞給TransactionManagerEntityManagerFactory,請參閱transactionManager方法中的以下配置。

@Configuration 
@EnableTransactionManagement 
public class HibernateConfiguration2 { 

@Bean 
public DataSource dataSource() { 
    return ...; // Build a basic datasource 
} 

@Bean 
@Autowired 
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) { 
    LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean(); 
    entityManagerFactory.setDataSource(dataSource); 
    entityManagerFactory.setPackagesToScan("nz.co.mark"); 
    entityManagerFactory.setPersistenceProviderClass(org.hibernate.ejb.HibernatePersistence.class); 

    return entityManagerFactory; 
} 

@Bean 
@Autowired 
public EntityManager entityManager(LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean) { 
    EntityManager em = localContainerEntityManagerFactoryBean.getNativeEntityManagerFactory().createEntityManager(); 
    em.setFlushMode(FlushModeType.AUTO); 
    return em; 
} 

@Bean 
@Autowired 
public JpaTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean emf) throws Exception { 
    JpaTransactionManager transactionManager = new JpaTransactionManager(); 
    transactionManager.setEntityManagerFactory(emf.getObject()); 
    // The below line would generate javax.persistence.TransactionRequiredException: no transaction is in progress 
    // transactionManager.setEntityManagerFactory(emf.getNativeEntityManagerFactory()); 
    return transactionManager; 
} 
0

我有同樣的問題......花了幾個小時,直到我終於找到原因。 這是代碼只需一行導致異常在我的情況...

在我MVC核心-config.xml中下面一行是原因:

<context:component-scan base-package="com.my.package.application" /> 

後我改了如下,一切又工作:

<context:component-scan base-package="com.my.package.application.controller" /> 

所以我想我所有的應用程序包,而不只是我@Controller類的掃描導致像his post to another answer中提到的@ harshal-waghmare這樣的問題。

相關問題