我很难找到关于@GeneratedValue的准确解释,以及从数据库角度来看发生了什么的不同策略。
是否将始终查询数据库并返回最后一个可用值?如果两个不同的进程(不同的Hibernate应用程序)同时访问同一张表会发生什么?特别是使用自动数值和序列
我假设您引用的是JPA @GeneratedValue。
该@GeneratedValue注解告诉ORM如何找出该字段的值。
@GeneratedValue
例如:
@Id @GeneratedValue(strategy=SEQUENCE, generator="CUST_SEQ") @Column(name="CUST_ID") public Long getId() { return id; } Example 2: @Id @GeneratedValue(strategy=TABLE, generator="CUST_GEN") @Column(name="CUST_ID") Long id;
要理解的关键是,生成的值具有策略,并且生成的值的策略确定发生了什么。在上面的示例中,SEQUENCE生成策略意味着ORM在首次保存对象时会向数据库询问序列的新值。第二个示例指定一个表生成策略,这意味着ORM将查询表中的一行以确定id的值。在示例示例2中,未显示使用哪个表的详细信息,因为该表引用了名为“ CUST_GEN”的生成器
您会遇到的典型发电机。
可以开发定制的生成器。与数据库的交互将取决于生成策略。