2013-01-21 71 views
0

我使用openejb作爲我的獨立容器來運行我的單元測試用例,在所有測試中的所有測試中,我能夠檢索值但無法插入或更新。即使我嘗試entitymanager.merge(obj),它正確地選擇了值,但它沒有更新它。與JPA Openejb - 能夠檢索,但不能插入數據庫

我是新來這個,所以請幫助我這個錯誤

在此先感謝

我persistence.xml文件

<persistence-unit name="test" 
     transaction-type="JTA"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>java:/OracleDS</jta-data-source> 
.....entity classes..... 
<properties> 
      <property name="eclipselink.target-server" value="JBoss" /> 
      <property name="eclipselink.target-database" value="Oracle" /> 
      <property name="eclipselink.logging.level" value="FINE" /> 
      <property name="eclipselink.logging.parameters" value="true" /> 
     </properties> 
    </persistence-unit> 

吾道方法

tp.setname("van"); 
tp.settype("vehicle"); 
//entityManager.getTransaction().begin(); 
entityManager.merge(tp); 
//entityManager.getTransaction().commit(); 
+0

什麼錯誤? – vels4j

+0

控制檯中沒有顯示任何錯誤。即使我的測試用例已通過。但是,當我檢查數據庫的數據沒有插入。在控制檯中顯示選擇查詢,但沒有插入查詢。 – user1996206

+0

合併後,您可以嘗試'entityManager.flush()'。 –

回答

0

做以下事項:

堅持新的實體:

Transport tp = new Transport(); 
tp.setname("van"); 
tp.settype("vehicle"); 
entityManager.getTransaction().begin(); 
entityManager.persist(tp); 
entityManager.getTransaction().commit(); 

更新現有的實體:

Query qry = entityManager.createQuery("Select t from 
             Transport t where t.type ='vechicle'"); 
List list = qry.getResultList(); 
//assume result return single entity 
Transport tp = list.get(0); 
tp.setInspectionDone(new Date()) ; 
entityManager.getTransaction().begin(); 
entityManager.merge(tp); 
entityManager.getTransaction().commit(); 
+0

謝謝sakthivel。我解決了這個問題。原因是我使用了@persistencecontext註釋,它將由Jboss容器管理。由於沒有創建服務器,因此DDL無法執行任何事務。所以我們必須通過EntityManagerFactory創建持久化對象,並且我們必須創建這個實體管理器。 – user1996206

+0

嗯那是很好的。 – vels4j

0

我認爲你需要廣告@Transactional註釋在類或方法