2009-07-27 22:09 使用hibernate需要注意的细节

1.如是有实体或实体类属性叫group,那么不能叫group,因为和数据库中的关键字冲突,必须重新命名


2.如果某个对象的id生成策略为uuid的话,当调用了session.save()方法时,其就id有值了,并纳入了
session缓存中,但并没有发出insert,session的existsInDatabase属性为false,此时数据库中没有数据


3.当调用session.flush()时,就会清理缓存,执行sql语句,如果数据库的隔离级别设为read uncommitted的话,就
可以看到flush的数据,这时session的existsInDatabase属性为true ,并会把session的insertions集体清空,
此时数据库中有数据,但flush并不提交事务,
所以是可以回滚的


4.调用tx.commit()时,会首先调用session.flush()

5.如果对象的id生成策略为native时,当调用session.save()时,就会发出sql语句,数据库中有数据,existsInDatabase
属性为true,并纳入了session管理
相当于调用了session.flush()

6.当调用session.evit()时,对象就会从session的EntityEntries属性中清除
如:
session.save(user);
session.evit(user);
tx.commit();
此是无法成功提交,因为hibernate在清现缓存时,在session的insertions集合中取出的user对象进行insert操作后
需要更新entityEntries属性中的existsInDatabase为true,而调用了session.evit(user)已经将user从session的entityEntries
中清除了,找不数据,无法更新,就会抛出异常

解决方法:

session.save(user);
session.flush();
session.evit(user);
tx.commit();

7.hibernate按照save(insert),update、delete顺序提交相关操作,如果想改变其顺序,就调用session.update()来改变

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值