gpt4 book ai didi

java - 如何在 Hibernate 中使用 pooled-lo 优化器

转载 作者:行者123 更新时间:2023-11-30 07:07:01 25 4
gpt4 key购买 nike

我有一个运行使用 JPA 的 EAR 的 JBoss 7.1.1。通过 JPA 注释,我使用映射到 org.hibernate.id.enhanced.TableGenerator 的策略 GenerationType.Table

有谁知道在使用“pooled-lo”优化器时如何配置 persistence.xml

最佳答案

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

现在,在我开始解释如何配置 pooledpooled-lo 优化器之前,您应该知道 TABLE 生成器是这是一个糟糕的选择,因为它不仅慢了 10 倍,而且还可能会阻塞您的数据库连接池,因为它需要额外的连接来获取标识符。

更多,因为它使用行级锁来分配下一个标识符,这可能会导致您的应用程序出现瓶颈。有关 TABLE 危险的更多详细信息发电机。

基于序列的优化器

从 Hibernate 5 开始,只要您将 JPA @SequenceGenerator 注释的 allocationSize 属性设置为一个值,就会使用 pooled 优化器大于 1

For Hibernate 4 or 3, to use the pooled or pooled-lo optimizers, you have to enable the following Hibernate property:

<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;

Hibernate pooled optimizere

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

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

Pooled-lo 优化器

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

@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 的工作原理,请查看此图:

Hibernate pooled-lo optimizer

If you have been using the legacy hilo optimizer, you might want to switch to using pooled or pooled-lo, as hilo is not interoperable with other clients that might not be aware of the hilo identifier allocation strategy.

关于java - 如何在 Hibernate 中使用 pooled-lo 优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com