gpt4 book ai didi

java - Hibernate 多次使用 Generatornames

转载 作者:行者123 更新时间:2023-12-01 14:47:05 28 4
gpt4 key购买 nike

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

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

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

我们改变了什么:

-baseentities(@MappedSuperclass):   
changed: @GeneratedValue(strategy = GenerationType.AUTO)
to: @GeneratedValue(strategy = GenerationType.AUTO, generator = "HIBERNATE_GENERATOR")

-扩展实体:

added after the @Table annotation:  
@SequenceGenerator(name = "HIBERNATE_GENERATOR", sequenceName = "${TABLENAME}_SEQ")

-独立实体:
在@Table注解后面添加:

@SequenceGenerator(name = "HIBERNATE_GENERATOR", sequenceName = "${TABLENAME}_SEQ")
changed : @GeneratedValue(strategy = GenerationType.AUTO)
to: @GeneratedValue(strategy = GenerationType.AUTO, generator = "HIBERNATE_GENERATOR")

因此,我们始终使用相同的生成器名称“HIBERNATE_GENERATOR”,只是序列名称不同。我们的应用程序似乎工作正常,但始终使用相同的生成器名称是否安全?

最佳答案

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

Defines a primary key generator that may be referenced by name when a generator element is specified for the GeneratedValue annotation. A sequence generator may be specified on the entity class or on the primary key field or property. The scope of the generator name is global to the persistence unit (across all generator types).

(强调我的)

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

关于java - Hibernate 多次使用 Generatornames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15321387/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com