我们有一个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时触发.
原文链接:https://www.f2er.com/oracle/205092.htmlcreate 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;