日期:2014-05-20  浏览次数:20802 次

关于hibernate怎么判断是更新还是插入
不知道你这个记录的主键在数据库中有没有,怎么用hibernate判断,在线等!谢谢!非常感谢!

------解决方案--------------------
看你传入的实体主键ID是不是为null或“”啊
修改id肯定不为空的或者你直接用saveorupdate方法
------解决方案--------------------
楼上说的是 ~~~就是看你对象的主键ID 我记得有个 saveOrupdate方法 就是这样~~
而且很恶心 修改的对象必须通过主键来查找 否则对象修改 数据库是没有保存的
也有可能是我的事务代码本身没写好的关系
------解决方案--------------------
用ID通过find方法查询一下,看看返回是否为null呗~
------解决方案--------------------
那贴下你错误信息吗~~有肯能是主键问题~~表的主键没定义自增的话~~
就不能用saveOrupdate

------解决方案--------------------
好像也不能这么说,没定义自增 主键不能为NULL
探讨
那贴下你错误信息吗~~有肯能是主键问题~~表的主键没定义自增的话~~
就不能用saveOrupdate

------解决方案--------------------
如果你在hibernate配置文件中配置了
<property name="show_sql">true</property>
<property name="format_sql">true</property>
他们的话,在控制台不就能很好的看到吗
还有就是你写hql语句的时候自己不清楚吗
------解决方案--------------------
两种方式根据你的程序来选吧。
分析一下:
1. 如果你的表主键有自增的话,那么你这个记录的主键在数据库中是肯定没有的。。这时候肯定是插入。。
只有当你传入的对象包含主键值时,才可能是更新操作。
这种情况下。。你直接判断你传入的对象是否包含主键ID值,就能判断是更新还是插入。。
那就可以推测楼主的表没有主键自增。。。否则不可能不知道是更新还是插入。。。

2. 如果你的表没有主键自增的话,那说明你每次操作的对象都带有主键值。导致你不知道是更新还是插入。那么这个时候通常可以根据saveorupdate来走捷径。。或者通过查看主键值是否存在。。。然后再修改。。。