【问题标题】:Hibernate ID generator "increment" by using annotationHibernate ID 生成器通过使用注解“增量”
【发布时间】:2015-12-14 07:13:03
【问题描述】:

根据 Hibernate 开发人员指南 3.3 here,Hibernate 以多种方式为生成标识符提供支持。但这是通过使用 基于 XML 的映射。 [1] 如何使用注解来做同样的事情?
特别是我对“增量”类型感兴趣。我发现最接近的是使用@GeneratedValue(strategy=GenerationType.AUTO)。但这是一个基于 JPA 的策略。
如何使用基于 Hibernate 的注解?
甚至这些信息也没有出现在 4.3 版的 Hibernate 开发人员指南中!有什么特别的原因吗?

更新
我非常了解来自 JPA 的四种策略。我对 Hibernate 提供的其他类型感兴趣。比如hiloincrement,等等。在文档中,这是通过使用 XML 配置来完成的。有没有办法将它与 Annotations 一起使用?

【问题讨论】:

    标签: java hibernate jpa annotations


    【解决方案1】:

    这对我有用:

    @Id @GeneratedValue(generator = "increment")
    private int id;
    

    【讨论】:

      【解决方案2】:

      Hibernate 实现 JPA 并使用 JPA id 生成策略。

      在此处查看 4.3 的文档: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/:第 5.1.2.2 节。标识符生成器

      Hibernate 还提供了@GenericGenerator,可以通过传入策略属性来配置 Hibernate 特定的生成器

      【讨论】:

      • 我引用了 hibernate 开发指南“这些是四个标准的 JPA 生成器。Hibernate 超越了它并提供了额外的生成器或额外的选项,我们将在下面看到”。下面讨论了hibernate提供的其他类型的生成器。 here我的问题是关于这个的!
      • 你能检查一下 GenericGenerator 注释是否适合你。 docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/…
      • GenericGenerator 注释就像一个魅力!这就是我一直在寻找的!谢了哥们!请更新您的答案。
      【解决方案3】:

      对于Hibernate 4.x,您可以找到 4 种类型的Generation Types

      GeneratorType.AUTO - 这是默认策略,可以跨平台移植 不同的数据库。 Hibernate 根据 数据库。

      GeneratorType.IDENTITY - 此设置基于提供的身份 通过一些数据库;数据库的职责是 提供唯一标识符。

      GeneratorType.SEQUENCE - 一些数据库提供了序列号的机制,所以这个设置会让 Hibernate 使用序列号。

      GeneratorType.TABLE - 有时主键是从另一个中的唯一列创建的 桌子。在这种情况下,请使用 TABLE 生成器。

      Annotations:

      如果 ID 生成策略为 NOT SET,则表示您使用的是 AUTO Strategy

      要使用其他的,注释如下:

      @Entity(name = "TBL_EMPLOYEE")
      public class Employee {
      @Id
      @Column(name="ID")
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private int employeeId =0;
      ...
      }
      

      public class Employee {
      @Id
      @Column(name="EMPLOYEE_ID")
      @GeneratedValue (strategy= GenerationType.SEQUENCE, generator="empSeqGen")
      @SequenceGenerator(name = "empSeqGen", sequenceName = "EMP_SEQ_GEN")
      private int employeeId =0;
      ...
       }
      

      public class Employee {
      @Id
      @Column(name="ID")
      @GeneratedValue (strategy= GenerationType.TABLE, generator="empTableGen")
      @TableGenerator(name = "empTableGen", table = "EMP_ID_TABLE")
      private int empoyeeId =0;
      ...
      }
      

      您也可以使用Composite Identifiers,在这种情况下,我建议您使用书籍Just Hibernate

      【讨论】:

        猜你喜欢
        • 2010-12-06
        • 1970-01-01
        • 2011-09-15
        • 2022-08-15
        • 1970-01-01
        • 2016-04-05
        • 2020-08-06
        • 2011-10-04
        相关资源
        最近更新 更多