簡體   English   中英

Eclipselink:靜態和動態編織之間的區別

[英]Eclipselink: Difference between static and dynamic weaving

我使用eclipselink 2.6.3,並具有以下代碼:

public Temp getTemp() {
    EntityManager em=emf.createEntityManager();
    String queryString="SELECT a FROM Temp a";
    EntityGraph<Temp> eg = em.createEntityGraph(Temp.class);
    eg.addAttributeNodes("id");
    //eg.addAttributeNodes("name");
    Query query = em.createQuery(queryString);
    query.setHint("javax.persistence.fetchgraph", eg);
    List<Temp> items=query.getResultList();
    em.close();// ENTITYMANAGER IS CLOSED 
    return items.get(0);
}

public void temp(){
    Temp temp=getTemp();
    System.out.println("id:"+temp.getId());
    System.out.println("name:"+temp.getName());
}

情況1:當編織是靜態的( <property name="eclipselink.weaving" value="static"/> + de.empulse.eclipselink編織插件)並且我們執行temp.getName()時,將執行SQL查詢,並且必要的數據是已加載。 盡管我們確實關閉了實體經理。 我希望在temp.getName()處得到異常。

情況2:但是,如果編織是動態的( <property name="eclipselink.weaving" value="true"/> ),則會出現異常:

java.lang.ClassNotFoundException: org.eclipse.persistence.internal.jpa.EntityManagerImpl not found by com.temp [57]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1574)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.temp.Temp._persistence_checkFetched(Temp2.java)
at com.temp.Temp._persistence_get_name(Temp2.java)
at com.temp.Temp.getName(Temp.java:44)

如何解釋這種差異? 這是錯誤嗎?

如果您以桌面(獨立),tomcat或碼頭運行您的應用程序,則默認情況下不提供動態編織,並且不支持延遲獲取,所有延遲獲取都將被視為緊急處理。

關於靜態編織,以下內容來自eclipselink教程: http ://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial

JPA的局限性
由於Tomcat不是Java EE 5兼容服務器,因此JPA有一些限制。 無動態編織(儀表)
-通過EclipseLink仍然可以靜態編織實體,沒有可用的會話Bean的@EJB注入(包含EntityManager)
-直接使用持久性工廠和管理器沒有可用的容器管理持久性單元的@PersistenceContext注入
-使用Persistence.createEntityManagerFactory(JTA_PU_NAME)

使您的實體支持靜態編織: http : //wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving/Static_Weaving

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM