hibernate提交事务时报如下错误:
Caused by: org.hibernate.HibernateException:
identifier of an instance of user is alterde from from 41 to 43。
导致该错误的代码如下:
private User user = new Usesr();
public void save(){
Session session=HibernateSessionFactory.getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.saveOrUpdate(user);
tx.commit();
} catch (HibernateException e) {
tx.rollback();
log.error("Error: " + e.getMessage());
}
}
导致该错误的原因:
在使用seam框架中将一个action类的上下文范围定义page范围,访问一个注册页面,
添加注册信息,调用该action类保存后,如果页面还是返回到注册页面(即返回到原页面),
当再次填写注册信息保存时,由于该action类的上下文范围是page范围,上一次保存的user对象还存在,
导致再次保存user对象提交事务插入时hibernate认为第二次保存的对象与之前的对象是同一个对象,之前的主键被更新,因此报错。
解决办法:
在每次提交事务后再立即新建一个对象。
正确的代码如下:
private User user = new Usesr();
public void save(){
Session session=HibernateSessionFactory.getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.saveOrUpdate(user);
tx.commit();
[color=red]user = new User();[/color]
} catch (HibernateException e) {
tx.rollback();
log.error("Error: " + e.getMessage());
}
}
导致该错误的其它原因可能还有:
hibernate hbm里面id的type和java文件里面的不一致!
Caused by: org.hibernate.HibernateException:
identifier of an instance of user is alterde from from 41 to 43。
导致该错误的代码如下:
private User user = new Usesr();
public void save(){
Session session=HibernateSessionFactory.getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.saveOrUpdate(user);
tx.commit();
} catch (HibernateException e) {
tx.rollback();
log.error("Error: " + e.getMessage());
}
}
导致该错误的原因:
在使用seam框架中将一个action类的上下文范围定义page范围,访问一个注册页面,
添加注册信息,调用该action类保存后,如果页面还是返回到注册页面(即返回到原页面),
当再次填写注册信息保存时,由于该action类的上下文范围是page范围,上一次保存的user对象还存在,
导致再次保存user对象提交事务插入时hibernate认为第二次保存的对象与之前的对象是同一个对象,之前的主键被更新,因此报错。
解决办法:
在每次提交事务后再立即新建一个对象。
正确的代码如下:
private User user = new Usesr();
public void save(){
Session session=HibernateSessionFactory.getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.saveOrUpdate(user);
tx.commit();
[color=red]user = new User();[/color]
} catch (HibernateException e) {
tx.rollback();
log.error("Error: " + e.getMessage());
}
}
导致该错误的其它原因可能还有:
hibernate hbm里面id的type和java文件里面的不一致!