在WebSphere 7上運行OpenJPA 1.2.3應用程序,出於某些原因,我們無法在此處使用依賴注入實體管理器。所以我們在提交/回滾事務後手動管理它們並關閉它們。最近我發現致電EntityManager.close()
需要相當長的時間(約佔整個操作的10%,涉及裝載約500個實體)。它所做的是分離事務中加載的所有實體。 所以其實有2個問題:OpenJPA:分離EntityManager.close()上的所有實體
- 爲什麼一般我們需要分離的實體管理器關閉所有實體?是否因爲JPA必須檢查所有實體是否髒?
- 因爲在某些情況下,實體被加載爲只讀訪問 - 是否有可能以某種方式告訴OpenJPA這些實體不應該被更新,並且不需要將它們標記爲髒,更新到DB等。
添加我的persistence.xml
的要求:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="DocumentUnit" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>ru.mypackage.Document</class>
<class>ru.mypackage.DocParam</class>
<class>ru.mypackage.DocParamPK</class>
<!-- Some more classes -->
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
</properties>
</persistence-unit>
</persistence>
添加我的persistence.xml到帖子,但不認爲它會幫助 - 它很簡單。 無論如何,我接受的答案,因爲它是一個更理論的問題... 我已經剖析了EntityManager.close(),基本上這就是這個問題的原因)大部分時間花在分離所有已知實體(do不記得確切的方法名稱雖然()。 無論如何,這是另一個遷移到JPA 2.0 ASAP的原因。 –