【发布时间】:2011-12-21 13:46:55
【问题描述】:
我们有一个插入前触发器,可以从序列中获取下一个值。当对象使用 save() 方法持久化时,hibernate 从序列中获取值并将其添加到对象中。当事务从 Spring 的服务层提交时,ID 值在数据库上再次增加。如果对象已经有一个 id,我如何避免得到 nextval() ..
这就是我想做的事情..
用户道
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;
/////////////////
}
当光标到达 line1 并且 line2 用户对象的 id 属性为 null 时。在第 2 行之后,它具有序列中的下一个值 - 比如说 1。在第 4 行,我已将用户的 id=1 添加到 useraudit 对象。当在第 5 行之后提交事务时,将 2 插入到用户的 id 列中,将 1 插入到 UserAudit 的 userId 列中。这对我没有任何意义:(我该如何避免这个问题?谢谢!
【问题讨论】:
标签: oracle hibernate spring-mvc triggers sequence