jboss 如何将pooled-lo优化器与Hibernate一起使用

t3irkdon  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(112)

我有一个JBoss 7.1.1,运行一个使用JPA的EAR。通过JPA注解,我使用Map到org.hibernate.id.enhanced.TableGenerator的策略GenerationType.Table
有人知道在使用“pooled-lo”优化器时如何配置persistence.xml吗?

62lalag4

62lalag41#

TABLE生成器是一个糟糕的选择

现在,在我开始解释如何配置pooledpooled-lo优化器之前,您应该知道,TABLE生成器是一个糟糕的选择,因为它不仅速度慢10倍,而且会使数据库连接池拥塞,因为它需要一个额外的连接来获取标识符。
更多,因为它使用行级锁来分配下一个标识符,这可能会导致应用程序中的瓶颈。

基于序列的优化器

从Hibernate 5开始,只要将JPA @SequenceGenerator注解的allocationSize属性设置为大于1的值,就会使用pooled优化器。
对于Hibernate 4或3,若要使用pooledpooled-lo最佳化工具,您必须启用下列Hibernate属性:

<property name="hibernate.id.new_generator_mappings" value="true"/>

值得注意的是,pooledpooled-lo优化器仅适用于SEQUENCE和TABLE生成器,因为这些优化器的目标是减少获取下一个实体标识符所需的数据库往返次数。

池化优化程序

pooled优化器非常容易设置,您只需设置JPA @SequenceGenerator注解的allocationSize,Hibernate将切换到使用pooled优化器:

@Id
@GeneratedValue(
    strategy = GenerationType.SEQUENCE,
    generator = "post_sequence"
)
@SequenceGenerator(
    name = "post_sequence",
    sequenceName = "post_sequence",
    allocationSize = 3
)
private Long id;

由于此Map更直接,因此如果还提供以下Hibernate配置属性,则可以切换到pooled-lo而不是pooled

<property name="hibernate.id.optimizer.pooled.preferred" value="pooled-lo" />

入池优化器

要使用pooled-lo优化器,实体标识符Map将如下所示:

@Id
@GeneratedValue(
    strategy = GenerationType.SEQUENCE,
    generator = "pooled-lo"
)
@GenericGenerator(
    name = "pooled-lo",
    strategy = "sequence",
    parameters = {
        @Parameter(
            name = "sequence_name",
            value = "post_sequence"
        ),
        @Parameter(
            name = "initial_value",
            value = "1"
        ),
        @Parameter(
            name = "increment_size",
            value = "3"
        ),
        @Parameter(
            name = "optimizer",
            value = "pooled-lo"
        )
    }
)

要了解pooled-lo的工作原理,请查看下图:

如果您一直在使用传统的hilo优化器,则可能希望切换到使用pooledpooled-lo,因为hilo无法与其他客户端进行互操作,这些客户端可能不知道hilo标识符分配策略。

dxxyhpgq

dxxyhpgq2#

同时,我的问题得到了答案。
当您在persistent.xml文件的<properties>部分中添加以下行时,hib将使用“pooled-lo”优化器。

<property name="hibernate.id.optimizer.pooled.prefer_lo" value="true" />

相关问题