首先通过主键load一个对象,然后通过save保存这个对象,不过load里面的key可能在数据库里找不到,所以会抛出异常:no rows with given indentifier exists。想要达到的目的是,如果没有在数据库中找到数据则新增该条数据,请问有啥办法可以解决?谢谢!已经知道的一些事情:load是得到一个对象,如果数据库里不存在则返回一个不可恢复的异常,网上说可以用get试试。

解决方案 »

  1.   

    可以用session.get()方法啊,它与load()方法的区别是:如果数据库中不存在指定对象load是抛出异常,而get是直接返回null,当调用load()时,程序不马上去数据库中加载,而是要用到load回的对象时再去加载,而get是直接就去加载.其实你也可以在load里面的异常当中进行捕获啊.
      

  2.   

    可以先根据条件查得数据,使用session.createQuery("from TabObject as obj where obj.Object=aa");
    把值赋给TabObject,主要是Id,因为session.Update(TabObject);是通过条件id去更改的
    然后在使用session.Update(TabObject);
      

  3.   


    有的时候,特别是分布式系统集成的时候,你并不知道对方是不是有该条记录。
    所以才会发生我上面所说的问题。后来我还自己试了,就是用get方法可以成功。虽然会报个错误,但是实际数据已经可以保存到数据库中。谢谢各位!