我正在試用JPA在獨立模式下(由Hibernate支持)。 我注意到下面的代碼更改數據庫值設置爲「亂碼」成功:JPA獨立模式 - 更改EntityTransaction外部的管理實體字段的工作原理 - 爲什麼?
A a = em.find(A.class, 1);
a.setA1("garbled");
entityTransaction.begin(); // line 3
entityTransaction.commit(); // line 4
em.close();
沒有其他交易()開始前線3。 在API spec for EntityTransaction使用的語言似乎另有指示或可能的東西是有點反直覺的劃分與一個JPA實體交易開始的模型()和提交()?請注意,行和是必要的,因爲註釋它們不會更改數據庫值。
我同意這種行爲是違反直覺的(並且給出的答案是完全正確的),這就是爲什麼像DataNucleus JPA這樣的一些JPA實現提供了「原子」非事務操作,即「a.setA1( )「會立即進入數據存儲區(如JDBC中的」自動提交「),而不必啓動新的事務來獲取它。 – DataNucleus