gpt4 book ai didi

java - 如何使 Hibernate 在 Oracle 上为 JPA GenerationType.AUTO 使用 SequenceHiLoGenerator?

转载 作者:行者123 更新时间:2023-11-29 02:51:50 24 4
gpt4 key购买 nike

我有一个 id 如下所示的表,但是 hibernate 使用 org.hibernate.id.SequenceGenerator 而不是 GenerationType.AUTO 的 SequenceHiLoGenerator,我如何告诉 hibernate 使用 SequenceHiLoGenerator?

@Id
@SequenceGenerator(name="admin_seq", sequenceName="unique_id")
@GeneratedValue(strategy=GenerationType.AUTO, generator="admin_seq")
private Long id

如果我使用 GenerationType.SEQUENCE,hibernate 将使用 SequenceHiLoGenerator,但为了与 MySQL 兼容,我需要使用 GenerationType.AUTO。

我试过使用@GenericGenerator,它适用于 Oracle,但会被 MySQL 提示:org.hibernate.dialect.MySQLDialect 不支持序列。

@GenericGenerator(name = "admin_seq", strategy = "org.hibernate.id.SequenceHiLoGenerator",
parameters = {
@Parameter(name = "sequence", value = "unique_id"),
@Parameter(name = "max_lo", value = "50") })
@GeneratedValue(strategy=GenerationType.AUTO, generator="admin_seq")
private Long id

我还尝试通过在 hibernate 属性中设置 hibernate.id.new_generator_mappings=true 来使用 SequenceStyleGenerator。它也不起作用。

最佳答案

如果您设置使用 SequenceStyleGeneratorhibernate.id.new_generator_mappings=true,它将适用于 Oracle。我们的项目中有类似的配置,效果很好。

如果你想实现批量 id 检索(比如每次 50 个)以加速 persist/save,这里的怪癖是你需要将 allocationSize 设置为 50并将你的序列 Increment By 设置为 50。这里的 50 只是我选择的一个随机数,如果你有大量的坚持,你可以分配更大的数字。这里最重要的是代码中的allocationSize和数据库中的Increment By应该MATCH

Oracle sql 是这样的

ALTER SEQUENCE YOUR_SEQUENCE_NAE INCREMENT BY 50;

JPA 实体 ID 字段如下:

        @SequenceGenerator(name = "YOUR_ID_GEN", sequenceName = "SEQ_YOUR_ID",  allocationSize=50)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "YOUR_ID_GEN")
@Column(name = "YOUR_ID")
public Long getYourId() {
return this.yourId;
}

关于java - 如何使 Hibernate 在 Oracle 上为 JPA GenerationType.AUTO 使用 SequenceHiLoGenerator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34822314/

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