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

我们有一个插入前触发器,它从序列中获取下一个值。当对象使用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列中。这对我毫无用处:(我该如何避免这个问题?谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值