gpt4 book ai didi

java - hibernate 和 oracle 序列 GenericGenerator 造成差距

转载 作者:行者123 更新时间:2023-11-30 11:42:28 26 4
gpt4 key购买 nike

我已经将我的类映射如下(省略了其他字段,因为只有 ID 很重要):

@Entity
@Table(name = "MODEL_GROUP")
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class SettlementModelGroup implements Serializable
{


@Id
@GeneratedValue(generator = "MODEL_GROUP_SEQ", strategy = GenerationType.SEQUENCE)
@GenericGenerator(name = "MODEL_GROUP_SEQ",
strategy = "sequence",
parameters = @Parameter(name = "sequence", value = "SEQ_MODEL_GROUP_MODEL_GROUP_ID"))
@Column(name = "MODEL_GROUP_ID", nullable = false)
private Integer modelId;
}

当我保存新对象时:

Integer modelGroupId = sessionFactory.getCurrentSession().save( modelGroup );
System.out.println( modelGroupId );

ID 设置为例如 23,但当我查看数据库时它实际上是 24。这会导致很多问题,因为我稍后会使用这个 ID。知道为什么会造成这种差距吗?

SQL 日志显示一切正常(我是这么认为的):

Hibernate: 
select
SEQ_MODEL_GROUP_MODEL_GROUP_ID.nextval
from
dual
Hibernate:
insert
into
MODEL_GROUP
(DOMAIN_ID, DESCRIPTION, NAME, PERIOD_TYPE_ID, MODEL_GROUP_TYPE_ID, STATUS_ID, OWNER_ID, MODEL_GROUP_ID)
values
(?, ?, ?, ?, ?, ?, ?, ?)

触发器和序列:

CREATE SEQUENCE "SEQ_MODEL_GROUP_MODEL_GROUP_ID" 
INCREMENT BY 1
START WITH 1
NOMAXVALUE
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER
;

CREATE OR REPLACE TRIGGER "TRG_MODEL_GROUP_MODEL_GROUP_ID"
BEFORE INSERT
ON "MODEL_GROUP"
FOR EACH ROW
WHEN (NEW."MODEL_GROUP_ID" is NULL)
BEGIN
SELECT "SEQ_MODEL_GROUP_MODEL_GROUP_ID".NEXTVAL
INTO :NEW."MODEL_GROUP_ID"
FROM DUAL;
END;

最佳答案

显然,当 Hibernate 向您的数据库询问 ID 的 nextValue 时,它​​也会触发 Trigger。因此,当我请求 ID 时,我得到的是 23,但是当通过提交事务实际保存到数据库时,它又增加了,所以我得到了 24。此处描述了解决方案:

HIbernate issue with Oracle Trigger for generating id from a sequence

为了使其正常工作,我更改了 Trigger:

CREATE OR REPLACE TRIGGER "TRG_MODEL_GROUP_MODEL_GROUP_ID" 
BEFORE INSERT
ON "MODEL_GROUP"
FOR EACH ROW
WHEN (NEW."MODEL_GROUP_ID" is NULL)
BEGIN
SELECT "SEQ_MODEL_GROUP_MODEL_GROUP_ID".NEXTVAL
INTO :NEW."MODEL_GROUP_ID"
FROM DUAL;
END;

关于java - hibernate 和 oracle 序列 GenericGenerator 造成差距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11691674/

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