gpt4 book ai didi

oracle - Oracle触发器的HIbernate问题,用于从序列中生成ID

转载 作者:行者123 更新时间:2023-12-04 05:33:37 25 4
gpt4 key购买 nike

我们有一个插入前触发器,它从序列中获取下一个值。当对象使用save()方法持久化时,hibernate从序列中获取值并将其添加到对象中。当从Spring的服务层提交事务时,该ID值将再次在数据库上增加。如果对象已经具有ID,该如何避免获取nextval()。

这就是我想做的..

UserDao

public User saveUser(User user){
session.getCurrentSession.save(user);//line2
return user;//line3
}

用户服务
public void saveUserAndWriteToAudit(User user, UserAudit userAudit){
userDao.saveUser(user);//line1
userAudit.setUserId(user.getId);//line4
userAudit.saveUserAudit(userAudit);//line5
}

和用户类别
 @Entity
public class User{

@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="a1")
@SequenceGenerator(name="a1", sequenceName="usersequence")
private Long id;
/////////////////
}

当光标到达第1行和第2行时,用户对象的id属性为null。在第2行之后,它具有来自序列的nextval-比方说1.在第4行上,我已将用户的id = 1添加到useraudit对象。.当在第5行之后提交事务时,将2插入到User的id列中,并将1插入到UserAudit的userId列中。这对我毫无用处:(我该如何避免这个问题?谢谢!

最佳答案

只需将触发器更新为仅在未提供ID时才触发。

create or replace
trigger sa.my_trigger
before insert on sa.my_table
for each row
when (new.id is null)
begin
select sa.my_sequence.nextval
into :new.id
from dual;
end;

关于oracle - Oracle触发器的HIbernate问题,用于从序列中生成ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002119/

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