美文网首页
session.save()

session.save()

作者: 游牧族人 | 来源:发表于2018-05-20 17:48 被阅读8次

    先理解hibernate对象三种持久化状态。
    首先,session.save()方法的功能将对象持久化到数据库中,对应到数据库中就是一条insert语句。session.save()方法的返回值为插入到数据库中的主键值。
    当我们期望session.save()方法返回给我们期望的主键值时,我们必须手动合适的设置数据库的主键生成策略。否则可能会获取不到我们期望的主键值。
    例如:



    此时我们如果不设置kind_id便插入到数据库中,session.save()的返回值便为0。即使他在数据库中插入的id不为0。
    然而当我们设置的主键生成策略与数据表中生成策略不符时,便会报异常。



    这时我们不设置kind_id便把数据插入到数据库中时,他也会返回记录插入的id值。

    持久化之前的输出:

    持久化之后的输出:
    总结:

    使用hibernate时请设置好合适的主键生成策略,避免使用默认的程序设置主键生成策略,否则会出现数据持久化的各种异常。

    自己遇到过的异常信息:

    1、使用了默认的主键生成策略(即程序手动设置主键),同时并没有在持久化过程中手动设置主键,导致以下问题:
    在同一个事务中无法save()之后继续修改持久化对象再次save()。
    在同一个事务中无法save()两个不同的实例对象。
    无法准确获得插入记录的主键值。

    相关文章

      网友评论

          本文标题:session.save()

          本文链接:https://www.haomeiwen.com/subject/kqltjftx.html