首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA IdGeneration策略自动

JPA IdGeneration策略自动
EN

Stack Overflow用户
提问于 2011-04-04 11:30:01
回答 2查看 898关注 0票数 0

我想有一个具有自动IdGeneration策略的实体,我需要它在Oracle和MySQL上都能工作,我需要为每个实体指定序列名称。

当我将主键注释为:

代码语言:javascript
复制
@Id
@Column(name="id")
@GeneratedValue(strategy= GenerationType.AUTO, generator="sequence")

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

如果我使用

代码语言:javascript
复制
@Id
@Column(name="id")
@GeneratedValue(strategy= GenerationType.AUTO)

我不能为每个表指定序列名称。这是解决这个问题的一种方法吗?

我使用Hibernate作为我的JPA提供者

EN

回答 2

Stack Overflow用户

发布于 2011-04-05 15:26:05

将id字段声明为:

代码语言:javascript
复制
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,
    generator = "LegacyIdGenerator")
@GenericGenerator(
    name = "LegacyIdGenerator",
    strategy = "com.backend.hibernate.PenetratingIdGenerator")

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

票数 0
EN

Stack Overflow用户

发布于 2015-10-13 18:25:30

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

代码语言:javascript
复制
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="seq_gen_default")
@SequenceGenerator(name="seq_gen_default", sequenceName="ENTITY_SEQ")
private Long id;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5534301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档