Mic*_*idt 5 java optimization orm jboss hibernate
我有一个运行使用 JPA 的 EAR 的 JBoss 7.1.1。通过 JPA 注释,我使用GenerationType.Table
映射到org.hibernate.id.enhanced.TableGenerator
.
有谁知道persistence.xml
在使用“pooled-lo”优化器时如何配置?
现在,在我开始解释如何配置pooled
或pooled-lo
优化器之前,您应该知道TABLE
生成器是一个糟糕的选择,因为它不仅慢了 10 倍,而且会阻塞您的数据库连接池,因为它需要一个额外的连接来获取标识符。
更多,因为它使用行级锁来分配下一个标识符,这可能会导致您的应用程序出现瓶颈。有关TABLE
发电机危险的更多详细信息。
从 Hibernate 5 开始,pooled
只要您allocationSize
将 JPA@SequenceGenerator
注释的属性设置为大于 的值,就会使用优化器1
。
对于 Hibernate 4 或 3,要使用
pooled
或pooled-lo
优化器,您必须启用以下 Hibernate 属性:Run Code Online (Sandbox Code Playgroud)<property name="hibernate.id.new_generator_mappings" value="true"/>
值得注意的是,优化器pooled
和pooled-lo
优化器仅可用于 SEQUENCE 和 TABLE 生成器,因为这些优化器的目标是减少获取下一个实体标识符所需的数据库往返次数。
该pooled
优化是很容易设置。您需要做的就是设置allocationSize
JPA@SequenceGenerator
注释的 ,Hibernate 将切换到使用pooled
优化器:
@Id
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "post_sequence"
)
@SequenceGenerator(
name = "post_sequence",
sequenceName = "post_sequence",
allocationSize = 3
)
private Long id;
Run Code Online (Sandbox Code Playgroud)
由于此映射更直接,如果您还提供此 Hibernate 配置属性pooled-lo
,pooled
则可以切换到代替:
<property name="hibernate.id.optimizer.pooled.preferred" value="pooled-lo" />
Run Code Online (Sandbox Code Playgroud)
要使用 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"
)
}
)
Run Code Online (Sandbox Code Playgroud)
要了解 pooled-lo 的工作原理,请查看此图:
如果您一直在使用旧
hilo
优化器,您可能希望切换到使用pooled
orpooled-lo
,因为hilo
它不能与可能不知道hilo
标识符分配策略的其他客户端互操作。
与此同时,我的问题得到了答案。
当您将以下行添加到<properties>
permanent.xml 文件中的部分时,hibernate 将使用“pooled-lo”优化器。
<property name="hibernate.id.optimizer.pooled.prefer_lo" value="true" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4226 次 |
最近记录: |