假设我有一个带有自动生成主键的实体。现在,如果我尝试使用可能不唯一的所有其他字段的值保存实体。 实体将自动填充插入行的id。它是如何获得主键值的?
编辑:
如果主键列是标识列,其值完全由数据库决定。所以它执行一个没有该列值的insert语句,并且db决定要使用的值,它是否会回复它的决定(我不这么认为)
答案 0 :(得分:7)
Hibernate使用三种方法来提取数据库自动生成的字段,具体取决于jdbc驱动程序或您正在使用的方言的支持。
Hibernate提取生成的字段值将其放回pojo中:
答案 1 :(得分:1)
This部分描述了id的自动生成。通常,AUTO生成策略用于最大程度的可移植性,并假设您使用Annotations提供域元数据,您可以按如下方式配置它:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
无论如何,提供的链接应该提供生成的ID所需的所有细节。
答案 2 :(得分:0)
使用序列派生的代理主键创建对象时,将其传递给Hibernate会话,该字段设置为Hibernate解释为“未分配”的值,默认为0.此字段为在相应的记录未插入数据库表之前,未填充指定的值。您可以通过在hibernate会话上显式调用flush()或在同一会话中执行数据库读取来触发插入。之后,您可以检查该字段的值,它将被分配而不是0.