2012-10-24 132 views
1

我有一個測試,當我使用MySQL後端完美運行。H2,JPA2,JBoss AS 7和Transactions

的persistence.xml:

<persistence-unit name="pu"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:jboss/datasources/mysqlTM</jta-data-source> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
     <property name="hibernate.cache.use_second_level_cache" value="true" /> 

     <!-- Properties for Hibernate --> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
     <property name="hibernate.show_sql" value="true" /> 
    </properties> 
</persistence-unit> 

然而,當我切換到H2如下:

的persistence.xml

<persistence-unit name="pu"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> 
     <property name="hibernate.cache.use_second_level_cache" value="true" /> 

     <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
     <property name="hibernate.show_sql" value="true" /> 
    </properties> 
</persistence-unit> 

使用如庫存的JBoss 7.1中定義的標準的數據源安裝和我得到以下異常:

Caused by: javax.persistence.TransactionRequiredException: JBAS011469: Transaction is required to perform this operation (either use a transaction or extended persistence context) 

谷歌一直沒有什麼幫助。我寧願使用H2來進行測試,只是爲了加快測試過程。

在此先感謝您的幫助,

+0

您能否發佈導致異常的代碼,包括您用於獲取EntityManager?的行。順便說一句 - 你不應該需要H2持久化單元的'provider'和'dialect'屬性。 – kostja

+0

@ kostja你讓我走上了正確的道路。與煤層安全有關的代碼,我想創建一個簡單的測試用例,甚至在注入seam事務管理器的時候,它也能工作。然後我意識到這是因爲MySQL和H2在查詢中處理區分大小寫的不同方式。謝謝。 :-D –

+0

很高興我能幫忙:) – kostja

回答

0

回答問題,以便它可以關閉。

事實證明,與交易有關的錯誤消息是紅鯡魚。這個錯誤是由於MySQL和H2在查詢中處理區分大小寫的不同方式造成的。

更新查詢區分大小寫解決了這個問題。