我有两个不同类型的相关实体(GENERAL和CUSTOM),我将它保存在同一个表中。类型为GENERAL的实体应具有唯一的字段名称值,并且CUSTOM可以为不同的用户提供重复项,而不是重复的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
}
答案 0 :(得分:0)
您可以通过向“目的”表添加另一列来完成此操作。此列用于存储GENERAL记录的常量值和CUSTOM记录的用户ID。对于GENERAL记录,值可以是0(如果用户标识是数字)或“GENERAL”(如果用户标识是字符串)。它可以命名为'userOfRecord'或'recordDiscriminator',就像那样。
然后您可以在[type,name,userOfRecord]上添加唯一约束。