JPAContainer初始化通過:
JPAContainerFactory.make(User.class, "persistenceUnitName");
使用一個也是唯一一個整個應用程序生命週期中EntitiyManager,即使其他會話使用相同的EntityManager。此外,此EntityManager已打開一個數據庫連接,並且它始終處於忙碌狀態。這種方法不是非常優化,它可能成爲應用程序性能的瓶頸。
好,JPAContainer可以通過初始化:
JPAContainerFactory.make(User.class, (EntityManager)enityManager);
在這種方法中,你必須處理的時候,創造新的EntityManager(EM)。您可以爲每個用戶/會話或每個用戶/ Sesssion和實體創建新的EM,這取決於您。這看起來很有前途,但JPAContainer有其他瓶頸。 JPAContainer每個EntityManager使用一個繁忙的連接。因此,如果使用自己的entityManager創建100個JPAContainer,則連接池將包含100個忙連接,這是一個大問題。因此,您必須將連接釋放模式設置爲「after_transaction」,這將強制JPAContainer在每次查詢後釋放連接。
的persistence.xml
<property name="hibernate.connection.release_mode" value="after_transaction" />
不管怎樣,這些都只是技巧,這使得JPAContainer非常有好處的,但不要指望魔術。 JPAContainer有更多的其他問題
- 不支持延遲加載
- 不支持批量入庫,每個條目由一個查詢+的每個關係,如果你想刷新JPAContainer其週期
- 一個查詢加載本身並需要永遠刷新
看看這篇文章。最好使用普通的JPA或Hibernate命名的Query或CriteriaBuilder和BeanItemContainer。 Save changes to database vaadin。