使用spring数据,我创建了user 1:n userdog n:1 dog关系。两者 1:N
关系是单向的 @ManyToOne
与 UserDog
作为自定义关系表。
用户实体:
@Entity
public class User {
@Id
@GeneratedValue
private long id;
@Column(nullable = false)
private String name;
}
狗实体:
@Entity
public class Dog {
@Id
@GeneratedValue
private long id;
@Column(nullable = false)
private String name;
}
用户狗关系表:
@Entity
public class UserDog {
@Id
@GeneratedValue
private long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn
@OnDelete(action = OnDeleteAction.CASCADE)
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn
@OnDelete(action = OnDeleteAction.CASCADE)
private Dog dog;
@Column(nullable = false)
private Instant createdOn = Instant.now();
@Column
private Instant disabledOn;
}
用例
用例用于存储 User
- Dog
混凝土 Dog
只能绑定到一个 User
当时。
所以我加了一句 createdOn
以及 disabledOn
列到 UserDog
. disabledOn
存在 null
指示关系处于活动状态,并且 Dog
不能再分配一个 User
. 如果 disabledOn
如果不为null,则存储记录仅用于证据目的,并且 Dog
可以分配给同一个或另一个 User
再一次。
问题
如何保证 Dog
的id和 disabledOn
空值在中是唯一的 UserDog
table?在伪代码中,我想要这样的东西:
@Entity
@UniqueConstraint({@UniqueConstraint(this.dog.id), @NullConstraint(this.disabledOn)})
public class UserDog {...}
1条答案
按热度按时间xn1cxnb41#
您可以简单地为创建一个唯一的约束
dogId
以及disabledOn
.它确实增加了限制,即没有两个关系可以同时结束,但这似乎适合您的用例。