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

解决方案 »

  1.   

    看你传入的实体主键ID是不是为null或“”啊
    修改id肯定不为空的或者你直接用saveorupdate方法
      

  2.   

    楼上说的是 ~~~就是看你对象的主键ID 我记得有个 saveOrupdate方法 就是这样~~
    而且很恶心  修改的对象必须通过主键来查找  否则对象修改 数据库是没有保存的
    也有可能是我的事务代码本身没写好的关系
      

  3.   

    用ID通过find方法查询一下,看看返回是否为null呗~
      

  4.   

    我用了saveorupdate就是出错,不知怎么搞的,谁可以给几个例子看看吗?
      

  5.   

    那贴下你错误信息吗~~有肯能是主键问题~~表的主键没定义自增的话~~
    就不能用saveOrupdate
      

  6.   

    http://topic.csdn.net/u/20110918/13/b362c16f-8b94-401f-813a-861182273428.html
      

  7.   

    好像也不能这么说,没定义自增 主键不能为NULL
      

  8.   

    如果你在hibernate配置文件中配置了
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    他们的话,在控制台不就能很好的看到吗
    还有就是你写hql语句的时候自己不清楚吗
      

  9.   

    两种方式根据你的程序来选吧。
    分析一下:
    1. 如果你的表主键有自增的话,那么你这个记录的主键在数据库中是肯定没有的。。这时候肯定是插入。。
    只有当你传入的对象包含主键值时,才可能是更新操作。
    这种情况下。。你直接判断你传入的对象是否包含主键ID值,就能判断是更新还是插入。。
    那就可以推测楼主的表没有主键自增否则不可能不知道是更新还是插入2. 如果你的表没有主键自增的话,那说明你每次操作的对象都带有主键值。导致你不知道是更新还是插入。那么这个时候通常可以根据saveorupdate来走捷径。。或者通过查看主键值是否存在然后再修改
      

  10.   

    我觉得saveorupdate就是你批量插入或者更新的时候,你的批量不能重复,不然出错,谢谢大家,我的问题解决了