java - Vaadin JPAContainer JDBC 连接使用

标签 java jdbc vaadin

一旦像这样创建了一个 JPAContainer

JPAContainer 用户 = JPAContainerFactory.make(User.class, "persistenceUnitName");

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

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

您能帮我理解一个 JPAContainer 实例与何时以及如何通过 EntityManager 使用 jdbc 连接之间的差距吗?

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

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

最佳答案

JPAContainer 初始化通过:

JPAContainerFactory.make(User.class, "persistenceUnitName"); 

在整个应用程序生命周期中只使用一个 EntitiyManager,甚至其他 session 也使用相同的 EntityManager。此外,此 EntityManager 已打开一个数据库连接,并且似乎一直很忙。这种方法不是很理想,它可能成为应用程序性能的瓶颈。

好吧,JPAContainer 可以通过以下方式初始化:

JPAContainerFactory.make(User.class, (EntityManager)enityManager); 

在这种方法中,您必须处理何时创建新的 EntityManager (EM)。您可以为每个用户/ session 或每个用户/ session 和实体创建新的 EM,这取决于您。这看起来很有希望,但 JPAContainer 有其他瓶颈。 JPAContainer 每个 EntityManager 使用一个繁忙的连接。因此,如果您使用自己的 entityManager 创建 100 个 JPAContainer,您的连接池将包含 100 个繁忙的连接,这是一个大问题。因此,您必须将连接 Release模式设置为“after_transaction”,这将强制 JPAContainer 在每次查询后释放连接。

persistence.xml

<property name="hibernate.connection.release_mode" value="after_transaction" />

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

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

看看这篇文章。最好将纯 JPA 或 Hibernate namedQuery 或 CriteriaBuilder 与 BeanItemContainer 一起使用。 Save changes to database vaadin .

关于java - Vaadin JPAContainer JDBC 连接使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11527049/

相关文章:

java - Vaadin:单击按钮后将文本字段中的文本设置为标签

Vaadin:你要求 Spring Security 忽略......不推荐这样做?

vaadin - Vaadin 的 css 样式表在哪里?

JavaFX WebView 不加载内容

java - 为什么我们称无界通配符参数化类型为可具体化的?

java - 如何保存 JPanel 的特定部分?

java - JDBC 会做些什么来保护我的密码和用户名不被嗅探吗?

java - 捕获关于、首选项和退出菜单项

Android Studio 使用JDBC 访问MYSQL

java - 在构造函数中抛出异常是否明智?