【发布时间】:2017-01-14 23:50:47
【问题描述】:
我有两个具有两种不同类型(GENERAL 和 CUSTOM)的相关实体,并将其保存在同一个表中。 GENERAL 类型的实体应该具有唯一的字段名称值,并且 CUSTOM 可以为不同的用户重复,而不是重复的 GENERAL 名称。 我正在寻找一种方法来创建条件唯一约束以检查下一个案例:
- 如果实体的类型为 GENERAL,则名称应该是唯一的
-
如果实体具有 CUSTOM 类型,则名称可以在表中重复但不能重复 GENERAL 项,并且对于特定用户应该是唯一的(按用户 ID)
@Entity @Table(name = "Purpose", uniqueConstraints = @UniqueConstraint(columnNames = {"purposeId"})) @Inheritance(strategy=InheritanceType.SINGLE_TABLE) public class GeneralPurpose {@Id @GeneratedValue(strategy=GenerationType.AUTO, generator="purpose_seq_gen") @SequenceGenerator(name="purpose_seq_gen", sequenceName="PURPOSE_SEQ") @Column(name = "purposeId", nullable = false) private long purposeId;
@Column(name = "type", nullable = false) @Enumerated(EnumType.STRING) private PurposeType type;
@Column(name = "name", nullable = false) private String name;
@Entity @Table(name = "Purpose") public class CustomPurpose extends GeneralPurpose {@ManyToOne() @JoinColumn(name="id") @JsonIgnore private User user;
public enum PurposeType { GENERAL, CUSTOM }
【问题讨论】:
标签: java mysql spring hibernate unique-constraint