首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate多次使用Generatornames

问Hibernate多次使用Generatornames
EN

Stack Overflow用户
提问于 2013-03-10 18:47:48
回答 1查看 137关注 0票数 0

我们目前正在从MSSQL迁移到Oracle,我们不想对所有的表都使用hibernate_sequence。每个表都应该有自己的序列。

我们已经在我们的测试环境中进行了更改,但如果我们的解决方案可以安全使用,我想获得一些额外的信息。

我们的大多数类都是从baseentities扩展而来的,但我们也有一些独立的实体。

我们更改的内容:

代码语言:javascript
复制
-baseentities(@MappedSuperclass):   
changed: @GeneratedValue(strategy = GenerationType.AUTO)   
to: @GeneratedValue(strategy = GenerationType.AUTO, generator = "HIBERNATE_GENERATOR")

-extending实体:

代码语言:javascript
复制
added after the @Table annotation:  
@SequenceGenerator(name = "HIBERNATE_GENERATOR", sequenceName = "${TABLENAME}_SEQ")

-独立实体:

在@Table注释之后添加:

代码语言:javascript
复制
@SequenceGenerator(name = "HIBERNATE_GENERATOR", sequenceName = "${TABLENAME}_SEQ")
changed : @GeneratedValue(strategy = GenerationType.AUTO)   
to: @GeneratedValue(strategy = GenerationType.AUTO, generator = "HIBERNATE_GENERATOR")

因此,我们总是使用相同的生成器名称"HIBERNATE_GENERATOR",只是sequenceNames不同。我们的应用程序看起来运行得很好,但是总是使用相同的生成器名称安全吗?

EN

回答 1

Stack Overflow用户

发布于 2013-03-10 18:57:10

不,这不安全。我的猜测是,所有生成的值都是由相同的序列生成的。事实上,javadoc说:

定义了一个主键生成器,当为GeneratedValue注释指定生成器元素时,可以通过名称引用该生成器。序列生成器可以在实体类上指定,也可以在主键字段或属性上指定。对于持久性单元(跨所有生成器类型),生成器名称的作用域是全局的。

(强调我的)

每个实体都应该定义自己的生成器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15321387

复制
相关文章

相似问题

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