我在IntelliJ中創建了一個「Java EE Web模塊」項目。然後我寫了一個接受JSON輸入的JaxRS註釋類。然後,我用數據填充帶註釋的實體,並嘗試使用託管的持久性上下文來保存它。TomEE + OpenJPA + IntelliJ實體不會持久
我有內的IntelliJ配置的數據源叫做「testdb的」,和持久性單元命名映射到在持久工具窗口該數據源「testunit」。
我的堅持XML看起來是這樣的:
<persistence-unit name="testunit">
<jta-data-source>testdb</jta-data-source>
<class>datamodels.testdb.CustomerSessions</class>
<properties>
<property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/testdb"/>
<property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
<property name="openjpa.ConnectionUserName" value="testuser"/>
<property name="openjpa.ConnectionPassword" value="testpassword"/>
<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
</properties>
</persistence-unit>
</persistence>
一切構建並部署得很好,沒有任何警告。請求也運行良好,並返回預期的響應,並生成新的客戶會話標識。
但是,數據庫中沒有任何內容出現。
所以,我的問題是:數據在哪裏發生,我怎樣才能使持久性和刷新調用對我的數據庫起作用?編輯: 我已經嘗試了更多的東西。
1)它看起來像TomEE正在使用某種內存HSQL數據庫,其數據源名稱爲「Default JDBC Data Source」。 2)當我手動創建實體管理器工廠,然後在實體管理器,一切正常:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("testunit");
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
CustomerSessions cs = new CustomerSessions(req.session_data);
em.persist(cs);
em.flush();
em.getTransaction().commit();
System.out.println("New CustomerSession saved: " + cs.getCustomerSessionId());
return Response.ok(cs).build();
} catch (Exception ex) {
em.getTransaction().rollback();
return Response.serverError().entity("An exception occurred").build();
}
2)如果我嘗試使用@PersistenceUnit
註釋創建EntityManagerFactory
,出現相同的初始問題。
當你返回響應時,你的瀏覽器可以看到'response ok'狀態碼?你的'交易管理器'配置是否正確?我懷疑它是在交易中失敗的地方。 –
@ Rp-是的,我正在使用Chrome中的Postman進行測試,並且返回的響應非常好,ID字段中填充了新的ID。坦率地說,看起來有一個神奇的無形數據庫被保存到我無法找到的地方。 我沒有寫任何有關TransactionManagers的,因爲我使用託管的持久性上下文。 – jzila
此外,如果這有幫助,當我停止服務器時,我得到這些信息消息:「2014年1月27日上午10時02分39秒org.apache.openejb.assembler.classic。彙編程序destroyResource 信息:關閉數據源:默認JDBC數據庫 2014年1月27日上午10時02分39秒org.apache.openejb.assembler.classic.Assembler destroyResource INFO:關閉數據源:默認非託管JDBC數據庫 J「.I' d期望這是我的數據源 – jzila