Hibernate 自动生成策略

Hibernate 自动生成策略,hibernate,jpa,identity,sequence,Hibernate,Jpa,Identity,Sequence,我希望有一个具有自动生成IdGeneration策略的实体,我需要它在Oracle和MySQL上工作,并且我需要为Oracle中的每个实体指定序列名 当我将主键注释为: @Id @Column(name="id") @GeneratedValue(strategy= GenerationType.AUTO, generator="sequence") 我在MySQL上发现一个错误,序列生成器未知 如果我使用 @Id @Column(name="id") @GeneratedValue(stra

我希望有一个具有自动生成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提供者

您将id字段声明为:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,
    generator = "LegacyIdGenerator")
@GenericGenerator(
    name = "LegacyIdGenerator",
    strategy = "com.backend.hibernate.PenetratingIdGenerator")
其中,穿透ID生成器是自定义ID生成器实现的IdentifierGenerator接口。现在,您可以根据需要在基础数据库的依赖项中生成ID。
无论如何,您的应用程序都会知道哪个数据库是底层数据库,因为您需要在配置文件中定义不同的方言等。

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

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