假设我有一个带有自动生成的主键的实体。现在,如果我尝试使用所有其他字段的值(可能不是唯一的)保存实体。
该实体将自动使用插入的行的ID进行填充。它是如何掌握该主键值的?

编辑:

如果主键列是身份列,其值完全由数据库决定。因此,它会执行没有该列值的插入语句,并且数据库会决定要使用的值,是否会传达其决策(我不这么认为)

最佳答案

Hibernate使用三种方法来提取DB自动生成的字段,具体取决于jdbc驱动程序或所用方言的支持。

Hibernate提取生成的字段值,将其放回pojo中:

  • 使用Statement.getGeneratedKeys方法(Statement javadocs)

  • 直接从insert语句中插入并选择生成的字段值。 (Dialect Javadocs)

  • 插入后执行select语句以检索生成的IDENTITY值

  • 所有这些都是通过 hibernate 在内部完成的。

    希望它是您正在寻找的说明。

    关于sql - hibernate 状态如何填充自动生成的字段的ID?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6262604/

    10-09 04:45