【问题标题】:Hibernate: rundown on how @GeneratedValue worksHibernate:简述@GeneratedValue 的工作原理
【发布时间】:2012-08-03 02:35:00
【问题描述】:

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

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

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    我假设您指的是 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”的生成器

    您会遇到的典型生成器。

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

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

    【讨论】:

    • 最适合一个 IDENTITY 或 SEQUENCE
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 2010-09-10
      • 2015-10-04
      • 2019-01-24
      • 2021-03-20
      • 2011-10-26
      • 2017-12-02
      • 2014-04-04
      • 1970-01-01
      相关资源
      最近更新 更多