session.save()

2018-05-20  本文已影响8人  游牧族人

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



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



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

持久化之前的输出:

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

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

自己遇到过的异常信息:

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

上一篇下一篇

猜你喜欢

热点阅读