JPA IdGeneration策略AUTO

时间:2011-04-04 03:30:01

标签: hibernate jpa identity sequence

我想拥有一个具有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提供程序

2 个答案:

答案 0 :(得分:0)

您将id字段声明为:

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

其中PenetratingIdGenerator是您的自定义ID生成器实现的IdentifierGenerator接口。现在,您可以根据需要生成ID,而不依赖于底层数据库。 在任何情况下,您的应用程序都会知道db是底层的,因为您需要在配置文件中定义不同的方言等。

答案 1 :(得分:0)

对于注释@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;