Vaadin JPAContainer JDBC连接用法

一旦创建了一个JPAContainer,就像

JPAContainer users = JPAContainerFactory.make(User.class,“persistenceUnitName”);

现在我假设“users”容器将使用一个EntityManager,而EntityManager又使用连接池中的一个JDBC连接。

资源利用率(连接到JPAContainer的附加到EntityManager的jdbc连接)发生在httprequest的生命周期内,或者entityManager / connection的使用还有另一个生命周期?

你能帮我理解一个JPAContainer实例与通过EntityManager使用jdbc连接的时间和方式之间的差距吗?

我阅读了vaadin jpa容器教程,我在那里找不到这些信息。 谢谢。

https://vaadin.com/forum/-/message_boards/view_message/1601953

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中

  

无论如何,这些只是技巧,这使得JPAContainer非常实用,但不要指望魔术。 JPAContainer还有更多其他问题

  • 不支持延迟加载
  • 不支持批量加载,每个条目由一个查询加载+每个关系一个查询
  • 如果你想刷新JPAContainer它会自行循环并永远刷新

看看这篇文章。 最好使用普通的JPA或Hibernate namedQuery或CriteriaBuilder和BeanItemContainer。 保存对数据库vaadin的更改 。