15

我很难找到对@GeneratedValue 的准确解释以及从数据库的角度来看发生的事情的不同策略。

是否总是查询数据库并返回最后一个可用值?如果 2 个不同的进程(不同的 Hibernate 应用程序)同时访问同一个表会发生什么?特别是使用自动数值和序列

4

2 回答 2

23

我假设您指的是 JPA @GeneratedValue。

@GeneratedValue注释告诉 ORM 如何计算该字段的值。

例如:

 @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”的生成器

您将遇到的典型生成器。

  • 身份 - 插入后向自动增量列询问项目的值
  • 序列 - 值来自 db 序列
  • table - 值来自数据库中的另一个表
  • 自动 - 根据数据库类型选择上述之一
  • UUID - 在插入之前生成一个 UUID

可以开发自定义生成器。与数据库的交互将取决于生成策略。

于 2012-08-03T02:46:55.087 回答
-3

请使用http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/链接作为参考。但是,如果您能说出您要寻找的具体内容,我可能会为您提供更好的帮助。这是关于@GeneratedValue 注释的一些细节……我喜欢这篇关于同一主题的博客文章http://elegando.jcg3.org/2009/08/hibernate-generatedvalue/。他做了很好的解释。

于 2012-08-03T02:45:48.657 回答