请教各位,我有个很困饶我的hibernate的问题!麻烦帮解决下,谢谢!

xufei547 2007-10-04 11:20:01
请教各位,我有个很困饶我的hibernate的问题!麻烦帮解决下,谢谢!
public boolean save(User transientInstance) {
System.out.println("-------------001");
try {
getSession().save(transientInstance);
this.getSession().beginTransaction().commit();
return true;
} catch (Exception re) {
return false;
}finally
{
this.getSession().close();
}

}
我执行这个save方法后,还是会报异常,也就是当第一次执行这个save方法后是正常的,第二次执行这个save方法后,就出现异常了,请问是怎么回事啊?谢谢!
很急,在线等!
...全文
225 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
terry_2000 2008-09-19
  • 打赏
  • 举报
回复
朋友,不知道你这个问题有没有解决???如果解决了,麻烦告诉下解决方法啊,谢谢了!!!
jxluoix 2007-10-10
  • 打赏
  • 举报
回复
楼主 ?? 还有什么不理解的吗????
kulin3422 2007-10-08
  • 打赏
  • 举报
回复
我看你写的代码就不是很规范
要先获得事务 然后执行操作 最后提交事务
yztommyhc 2007-10-08
  • 打赏
  • 举报
回复
我觉得你的配置文件里的id 的生成器被设置成了assigned ,所以会出现主键重复。

<generator class="native" /> 这样看看呢。
xufei547 2007-10-08
  • 打赏
  • 举报
回复
这个问题看上去确实是没问题,我的save方法第一次是确实可以执行成功的,当第二次执行的时候,他执行save方法,并且commit后,然后他又自动去执行catch的东西了,但是数据已经插进去了!这个怎么办啊?
xufei547 2007-10-08
  • 打赏
  • 举报
回复
楼上,一看就知道你是初学者!
tubage408 2007-10-06
  • 打赏
  • 举报
回复
Duplicate entry 'z777 ' for key 1 应该是这的问题吧
jxluoix 2007-10-06
  • 打赏
  • 举报
回复
要这样写,

Transaction transaction=null;
try{
transaction = this.getSession().beginTransaction();
this.getSession().save(transientInstance);
transaction.commit();
}catch(HibernateException e){
transaction.rollback();
}

这样做是没有问题
jxluoix 2007-10-06
  • 打赏
  • 举报
回复
我觉得是你第一次插入的时候 没有出现问题 表 中已经存在一条这样的记录 所以再不能插入 一条相同的记录了
godfather521 2007-10-06
  • 打赏
  • 举报
回复
两次 save 操作的是同一个对象
检查你的两次传过来的 user 是否不同

jxluoix 2007-10-06
  • 打赏
  • 举报
回复
这个问题该截帖了吧 明显的错误老
yztommyhc 2007-10-06
  • 打赏
  • 举报
回复
generator-class : assigned
sevenndust 2007-10-05
  • 打赏
  • 举报
回复
哦哦哦~~~~~~ 0076386@sina.com 可否 你把程序发来 我再告诉你
xufei547 2007-10-05
  • 打赏
  • 举报
回复
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

Caused by: java.sql.BatchUpdateException: Duplicate entry 'z777 ' for key 1

这2个异常
sevenndust 2007-10-05
  • 打赏
  • 举报
回复
public static Session getCurrentSession() {
if (useThreadLocal) {
Session s = (Session) threadSession.get();
if (s == null) {
log.debug("Opening new Session for this thread.");
s = getSessionFactory().openSession();
threadSession.set(s);
}
return s;
} else {
return getSessionFactory().getCurrentSession();
}
}

把这个放在你的工具类里

public void saveObjecet(Object obj) {
// TODO 自动生成方法存根
HibernateUtil.getCurrentSession().save(obj);
}

用这个方法存 肯定可以
sevenndust 2007-10-05
  • 打赏
  • 举报
回复
哥们 你能把异常放上来吗???????

你这个问题很显然是 三态 的问题 啊

xufei547 2007-10-05
  • 打赏
  • 举报
回复
按你的试了还是出现同样的异常!
怎么办啊?
sevenndust 2007-10-05
  • 打赏
  • 举报
回复
哈哈 忘没写关闭~~~~~

sevenndust 2007-10-05
  • 打赏
  • 举报
回复
这个问题是不是 状态的 问题啊

给你写个参考:

try{
tx = session.beginTransaction();
session.save(o);
tx.commit();
}
catch()Exception e
{
if(tx!null)
try
{
//如果发生错误回滚
tx.rollback();
}
catch(Exception){}
}
xufei547 2007-10-05
  • 打赏
  • 举报
回复
试过了,还是那样!怎么办啊?
加载更多回复(7)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧