是否可以将容器管理和应用程序管理的实体管理器组合在一个bean中?

时间:2014-09-07 19:55:40

标签: java hibernate java-ee jpa entitymanager

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

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

但为了实现这一点,我现在必须为整个类/ bean设置@TransactionManagement(TransactionManagementType.BEAN),从而管理整个bean应用程序。但我希望我的其他方法是容器管理的,只需要一个方法(制作批量插入的方法)进行应用程序管理。

这样可能还是有其他办法来处理这类案件?

1 个答案:

答案 0 :(得分:1)

JDBC batching是一个贯穿各领域的问题,您可以让它适用于所有实体管理器配置。

首先,您需要设置以下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 will disable JDBC batching

有关批处理优化的更多信息please read this article.