【问题标题】:MappedSuperclass - SequenceGenerator in Subclass (hibernate 5.2.13.Final)MappedSuperclass - 子类中的 SequenceGenerator (hibernate 5.2.13.Final)
【发布时间】:2018-02-12 14:43:06
【问题描述】:

我们尝试将项目形式 5.2.X 中的休眠版本升级到 5.2.13.Final , 但是新的休眠会正确强制

生成器名称的范围对于持久性单元是全局的(跨所有生成器类型)。

我们的 clas 结构由一个 BaseEntity 和定义了@GenericGenerator 的子类组成,所有生成器都使用相同的名称。

@MappedSuperclass
public class BaseEntity {
  @Id
  @Column(name="ID")
  @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="idGenerator")
  private Long id;
}

@Entity
@Table(name = "SAMPLE_TABLE")
@GenericGenerator(strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", name = "idGenerator", parameters = {
    @Parameter(name = SequenceStyleGenerator.SEQUENCE_PARAM, value = "SAMPLE_SEQ") })
public class SampleEntity extends BaseEntity 

是否有一个选项可以更正此生成器定义而不在每个类中放置 id 字段?

【问题讨论】:

  • 你找到解决办法了吗?

标签: java hibernate jpa


【解决方案1】:

这在 Hibernate 5.2.1 和 postgres 上对我们有用:

import org.hibernate.annotations.GenericGenerator
import org.hibernate.annotations.Parameter
import org.hibernate.id.enhanced.SequenceStyleGenerator
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id
import javax.persistence.MappedSuperclass

@MappedSuperclass
abstract class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @GenericGenerator(name = "sequenceGenerator", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
            parameters = [
                Parameter(name = SequenceStyleGenerator.CONFIG_PREFER_SEQUENCE_PER_ENTITY, value = "true"),
                Parameter(name = SequenceStyleGenerator.OPT_PARAM, value = "pooled"),
                Parameter(name = SequenceStyleGenerator.INITIAL_PARAM, value = "1"),
                Parameter(name = SequenceStyleGenerator.INCREMENT_PARAM, value = "50")
            ]
    )
    var id: Long? = null
}

代码在 kotlin 中,但您可以轻松地将其转换为 java。

如果您需要有关 SequenceStyleGenerator 的更多信息,请参阅docs

【讨论】:

  • 感谢您。你结束了几个小时的谷歌搜索
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
相关资源
最近更新 更多