當我打電話:Hibernate的JPA和Spring javax.persistence.TransactionRequiredException:沒有交易正在進行
entityManager.flush()
我得到的標題提到的異常。
我使用Hibernate的JPA。
當我打電話:Hibernate的JPA和Spring javax.persistence.TransactionRequiredException:沒有交易正在進行
entityManager.flush()
我得到的標題提到的異常。
我使用Hibernate的JPA。
確保這個語句的執行時,你有一個活躍的交易。如果您使用JPA,請使用EntityManager.getTransaction()。begin()。這假設您在JTA事務範圍外使用JPA。
如果您正在使用JTA容器內的應用程序支持,您還可以使用JTA UserTransaction的管理事務。
請確保您的處理程序方法聲明爲public
@Transactional
@RequestMapping('/test')
public String doTest() {
// do your stuff here
return 'testview';
}
好抓bro!.. –
確保您的Spring配置包括以下行:
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
mode
可以是代理或aspectj和transaction-manager
必須指向您的交易經理一直在。
和我一樣使用spring 3.0.0/3.0.3。數據在JUnit中保存在MySQL中,但不能從Tomcat服務器中保存。經過這麼多的工作,我放棄了JTA的RESOURCE_LOCAL。
這對我有用http://erich.soomsam.net/2007/04/24/spring-jpa-and-jta-with-hibernate-and-jotm/它使用JTA並依賴於JOTM。
對於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
註釋的方式:
遇到這個問題我自己,花了幾個小時的努力得到它解決了我終於找到了原因後,它自動裝配。
一旦從有關的服務類中刪除了@Service
註釋,以及相應的Bean是在XML配置聲明:
<bean id="myService" class="com.example.myapp.service.MyServiceImpl" />
問題了。
檢查這個JIRA bug瞭解更多詳情。
說這是一個錯誤並不完全正確,你給出的鏈接已經給出了很好的解釋,爲什麼會發生這種情況 - Service類在appContext.xml和spring-servlet.xml中被實例化爲一個bean。它只能在appContext.xml中獲得'bean',否則它將不具有事務支持。 –
@HarshalWaghmare你兩次保存了我的底部。我兩次遇到同樣的錯誤,並急切地想再次找到您的評論:D。最後,歡呼。告訴servlet-context只是爲了掃描控制器..一切都像魅力一樣。 – Aubergine
我的問題是與辦法做到,我設置了<tx:annotation-driven/>
元素在我的上下文定義 -
我原本加載時間啓用編織(不knownley)讀取<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>
並通過簡單地移除第二屬性 - 一切工作(但需要2小時的頭撞)。我相信,第二個元素涉及@Configurable sterotype但可以讓其他(聰明)的人解釋這一差別&爲什麼一個會工作&其他則沒有..希望這有助於...
工作定義= <tx:annotation-driven transaction-manager="transactionManager"/>
我做了以下所有事情。我的問題是「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與參考比較。
我終於加入
<tx:annotation-driven mode="aspectj" transaction-manager="yourTransactionManager" />
到我的應用程序的context.xml
你的回答與伊恩的答案相矛盾。他刪除了mode =「aspectj」參數。 – Brain
確保這個語句的執行時,你有一個活躍的交易固定的這個錯誤。如果您使用的是JPA,請使用EntityManager.getTransaction().begin()
。這假設您在JTA事務範圍外使用JPA。
我遇到了這個問題,只需在方法上添加@Transacctional註釋,並在類中添加@Service註釋。
例如:
@Service
@Transactional
public class MyService {
}
該類的@Transactional註解解決了我的問題。 – pablosaraiva
彈簧4.3.1 /休眠4.2.21
我的配置是一個沒有休眠或彈簧XML文檔100%的Java代碼(例如context.xml中,persistence.xml中等等)。問題是我正在傳遞給TransactionManager
的EntityManagerFactory
,請參閱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;
}
我有同樣的問題......花了幾個小時,直到我終於找到原因。 這是代碼只需一行導致異常在我的情況...
在我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這樣的問題。
顯示您的網頁。xml和你的servlets文件 –