Oracle Trigger的HIbernate问题,用于从序列生成id
发布时间:2021-05-18 06:49:10 所属栏目:百科 来源:网络整理
导读:我们有一个before insert触发器,它从序列中获取下一个值.当使用save()方法持久化对象时,hibernate从序列中获取值并将其添加到对象中.当从 Spring的服务层提交事务时,数据库上的ID值再次增加.如果对象已经有id,我该如何避免获取nextval().. 这是我想要做的
|
我们有一个before insert触发器,它从序列中获取下一个值.当使用save()方法持久化对象时,hibernate从序列中获取值并将其添加到对象中.当从 Spring的服务层提交事务时,数据库上的ID值再次增加.如果对象已经有id,我该如何避免获取nextval().. 这是我想要做的…… userDAO的 public User saveUser(User user){
session.getCurrentSession.save(user);//line2
return user;//line3
}
UserService 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;
/////////////////
}
当光标到达line1和line2时,用户对象在id属性中为null.在line2之后,它有来自序列的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; (编辑:永州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


