【问题标题】:Is it possible to combine a container managed and application managed entitymanager in a bean?是否可以在 bean 中结合容器管理和应用程序管理的实体管理器?
【发布时间】:2014-11-01 01:53:53
【问题描述】:

我在我的 JavaEE 应用程序中使用容器管理的事务,但据我所知,容器管理的 entitymanagers 缺乏对批量插入的支持。现在我有一个案例,我将在数据库中插入 很多 数据。是否有可能以某种方式将容器管理的实体管理器与 bean 中的应用程序管理的实体管理器结合起来?

如果是这样,我可以在我的 bean 中创建一个方法,在我多次调用 entitymanager.persist(myEntity); 之后提交数据,使其成为批量插入。

但是为了让它工作,我现在必须为整个类/bean 设置@TransactionManagement(TransactionManagementType.BEAN),从而使整个 bean 应用程序得到管理。但我希望我的其他方法由容器管理,只有一种方法(进行批量插入的方法)由应用程序管理。

这样的情况有可能吗,或者有其他方法吗?

【问题讨论】:

    标签: java hibernate jakarta-ee jpa entitymanager


    【解决方案1】:

    JDBC 批处理是一个横切关注点,您可以让它适用于所有实体管理器配置。

    首先您需要设置以下 Hibernate 属性:

    <property name="hibernate.order_updates" value="true"/>
    <property name="hibernate.order_inserts" value="true"/>
    <property name="hibernate.jdbc.batch_versioned_data" value="true"/>
    <property name="hibernate.jdbc.fetch_size" value="20"/>
    <property name="hibernate.jdbc.batch_size" value="50"/>
    

    还要确保使用 SEQUENCE 或 TABLE 标识符生成器,​​因为 IDENTITY 会禁用 JDBC 批处理

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 1970-01-01
      • 2015-12-12
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2016-02-10
      • 2013-09-24
      相关资源
      最近更新 更多