簡體   English   中英

MappedSuperclass-子類中的SequenceGenerator(休眠5.2.13.Final)

[英]MappedSuperclass - SequenceGenerator in Subclass (hibernate 5.2.13.Final)

我們嘗試將項目版本5.2.X中的休眠版本升級到5.2.13.Final,但是新的休眠正確地強制執行

生成器名稱的范圍對於持久性單元是全局的(跨所有生成器類型)。

我們的分類結構由一個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字段放置在每個類中的情況下更正此生成器定義的選項?

這對我們來說適用於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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM