JPAContainer 初始化通过:
JPAContainerFactory.make(User.class, "persistenceUnitName");
在整个应用程序生命周期中使用一个且仅一个 EntityManager,即使其他会话也使用相同的 EntityManager。此外,此 EntityManager 已打开一个 DB 连接,并且似乎一直很忙。这种方法不是非常理想,它可能成为应用程序性能的瓶颈。
好吧,JPAContainer 可以通过以下方式初始化:
JPAContainerFactory.make(User.class, (EntityManager)enityManager);
在这种方法中,您必须处理何时创建新的 EntityManager (EM)。您可以为每个用户/会话或每个用户/会话和实体创建新的 EM,这取决于您。这看起来很有希望,但 JPAContainer 还有其他瓶颈。JPAContainer 每个 EntityManager 使用一个繁忙的连接。因此,如果您使用自己的 entityManager 创建 100 个 JPAContainer,您的连接池将包含 100 个繁忙的连接,这是一个大问题。因此,您必须将连接释放模式设置为“after_transaction”,这将强制 JPAContainer 在每次查询后释放连接。
持久性.xml
<property name="hibernate.connection.release_mode" value="after_transaction" />
无论如何,这些只是技巧,这使得 JPAContainer 非常有用,但不要指望魔术。JPAContainer 还有更多其他问题
- 不支持延迟加载
- 不支持批量加载,每个条目由一个查询+每个关系一个查询加载
- 如果您想刷新 JPAContainer 它会自行循环并需要永远刷新
看看这个帖子。最好将纯 JPA 或 Hibernate namedQuery 或 CriteriaBuilder 与 BeanItemContainer 一起使用。
保存对数据库 vaadin的更改。