Hibernate 实体中的多个 SequenceGenerator
Multiple SequenceGenerator in Hibernate Entity
是否可以在 Hibernate Entity 中使用 2 个序列生成器 Class。我想为我的案例使用两个序列生成器,一个用于主键,另一个用于简单字段。我怎样才能达到同样的效果?
@Data
@Table(name="a_b")
@SequenceGenerator(name = "a1_seq", sequenceName = "a1_seq", allocationSize = 1)
@SequenceGenerator(name = "b1_seq", sequenceName = "b1_seq", allocationSize = 1)
public class ABC {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "a1_seq")
private Integer id;
@Column(name = "c")
private String c;
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "b1")
@Column(name = "b)
private Integer b;
}
在列级别而不是 class 级别定义您的@SequenceGenerator。因此,您可以为两个不同的列创建两个单独的 sequenceGenerator - a1_seq 和 b1。
@Data
@Table(name="a_b")
public class ABC {
@Id
@Column(name = "id")
@SequenceGenerator(name = "a1_seq", sequenceName = "a1_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "a1_seq")
private Integer id;
@Column(name = "c")
private String c;
@SequenceGenerator(name = "b1_seq", sequenceName = "b1_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "b1")
@Column(name = "b)
private Integer b;
}
这应该有效。我还没有测试过它,但由于在现场级别允许使用 SequenceGenerator,它应该可以工作。
你应该只有一个 SequenceGenerator 作为主键:
@Id
@Column(name = "id")
@SequenceGenerator(name = "a1_seq", sequenceName = "a1_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "a1_seq")
private Integer id;
对于外键,您可以:
@Column(name = "b, columnDefinition="serial")
private Integer b;
这应该适用于 PostgreSQL。
是否可以在 Hibernate Entity 中使用 2 个序列生成器 Class。我想为我的案例使用两个序列生成器,一个用于主键,另一个用于简单字段。我怎样才能达到同样的效果?
@Data
@Table(name="a_b")
@SequenceGenerator(name = "a1_seq", sequenceName = "a1_seq", allocationSize = 1)
@SequenceGenerator(name = "b1_seq", sequenceName = "b1_seq", allocationSize = 1)
public class ABC {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "a1_seq")
private Integer id;
@Column(name = "c")
private String c;
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "b1")
@Column(name = "b)
private Integer b;
}
在列级别而不是 class 级别定义您的@SequenceGenerator。因此,您可以为两个不同的列创建两个单独的 sequenceGenerator - a1_seq 和 b1。
@Data
@Table(name="a_b")
public class ABC {
@Id
@Column(name = "id")
@SequenceGenerator(name = "a1_seq", sequenceName = "a1_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "a1_seq")
private Integer id;
@Column(name = "c")
private String c;
@SequenceGenerator(name = "b1_seq", sequenceName = "b1_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "b1")
@Column(name = "b)
private Integer b;
}
这应该有效。我还没有测试过它,但由于在现场级别允许使用 SequenceGenerator,它应该可以工作。
你应该只有一个 SequenceGenerator 作为主键:
@Id
@Column(name = "id")
@SequenceGenerator(name = "a1_seq", sequenceName = "a1_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "a1_seq")
private Integer id;
对于外键,您可以:
@Column(name = "b, columnDefinition="serial")
private Integer b;
这应该适用于 PostgreSQL。