【问题标题】:JPA IdGeneration strategy AUTOJPA ID 生成策略 AUTO
【发布时间】:2011-04-04 03:30:00
【问题描述】:

我想要一个具有 AUTO IdGeneration 策略的实体,我需要它同时在 Oracle 和 MySQL 上工作,并且我需要为每个实体指定序列名称以防 Oracle。

当我将主键注释为:

@Id
@Column(name="id")
@GeneratedValue(strategy= GenerationType.AUTO, generator="sequence")

我在 MySQL 上遇到了一个错误,即序列生成器未知。

如果我使用

@Id
@Column(name="id")
@GeneratedValue(strategy= GenerationType.AUTO)

我无法为每个表指定序列名称。 有办法解决这个问题吗?

我使用 Hibernate 作为我的 JPA 提供程序

【问题讨论】:

    标签: hibernate jpa identity sequence


    【解决方案1】:

    您将 id 字段声明为:

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY,
        generator = "LegacyIdGenerator")
    @GenericGenerator(
        name = "LegacyIdGenerator",
        strategy = "com.backend.hibernate.PenetratingIdGenerator")
    

    其中 PenetratingIdGenerator 是您的自定义 ID 生成器实现的 IdentifierGenerator 接口。现在,您可以根据您的基础数据库生成所需的 ID。 无论如何,您的应用程序都会知道 db 是底层的,因为您需要在配置文件中定义不同的方言等。

    【讨论】:

      【解决方案2】:

      对于注解@GeneratedValue(strategy = GenerationType.AUTO)JPA 持久性提供程序将为特定数据库采取适当的策略。对于 Oracle 数据库,这将是 SEQUENCE,如果您不指定任何内容,Hibernate 将使用单个全局序列,即 hibernate_sequence

      @Id
      @GeneratedValue(strategy=GenerationType.AUTO, generator="seq_gen_default")
      @SequenceGenerator(name="seq_gen_default", sequenceName="ENTITY_SEQ")
      private Long id;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-23
        • 2020-02-10
        • 2012-04-19
        • 1970-01-01
        • 2016-03-23
        • 2012-06-09
        • 1970-01-01
        相关资源
        最近更新 更多