【问题标题】:Spring Boot: Set hibernate sequence globallySpring Boot:全局设置休眠序列
【发布时间】:2020-04-04 13:16:39
【问题描述】:

目前我通过以下方式定义表格:

示例是在 Kotlin 中,但您可以根据需要使用 Java 回答。

@Entity
data class Task(@Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
                var id: Int = 0,

                @ManyToOne(optional = false) @OnDelete(action = OnDeleteAction.CASCADE)
                var exercise: Exercise = Exercise(),

                @Column(nullable = false)
                var name: String = "")

@Entity
data class Exercise(@Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
                    var id: Int = 0,

                    @Column(nullable = false)
                    var count: Int = 0)

使用此示例,所有表都使用相同的序列:hibernate_sequence。

如果我想配置它,例如设置一个自定义allocationSize,那么我必须在每个表中定义它,对吗?

@SequenceGenerator(name = "task_seq", sequenceName = "task_seq", allocationSize = 100)

有 Bean 还是其他什么?因为我喜欢对所有表格使用相同顺序的想法。

【问题讨论】:

  • 这是哪个数据库?
  • 我正在使用 Postgres

标签: java spring hibernate jpa kotlin


【解决方案1】:

你可以有一个带有 Id 的抽象基类:

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

@MappedSuperclass
public abstract class BaseEntity {

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

}

每个实体都会扩展它。

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2013-07-25
    • 2019-09-27
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多