java - 如何使uniqe在实体中归档,但相对多的ToOne实体?
问题描述
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
private UUID id;
@Column(nullable = false)
private String title;
@JoinColumn(name = "user_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private User user;
}
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
private UUID id;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Task> tasks = new ArrayList<>();
}
我想让标题唯一,但不在表中的队列中,我需要用户的唯一标题。用户不应有与该用户的其他任务相同的标题的任务。
解决方案
您正在寻找的组合是基于 taskTitle + 用户组合的任务应该是唯一的:您必须将其添加到Task
表中:您可以使用注释来做到这一点
@Table(
name="UNQ_CONSTRAINT_NAME",
uniqueConstraints=
@UniqueConstraint(columnNames={"title", "user_id"})
)
public class Task{
//...
}
这样,您将永远不会在Task
表中获得具有相同标题 + 用户的双行
推荐阅读
- java - 如何编写具有文件大小限制的 XML?
- angular - 多个重复数据点 - Angularjs Rxjs 订阅未按预期工作
- java - javac找不到崇高的
- xcode - 我的故事板自定义类属性不再在 Xamarin 中生成自定义类?
- delphi - 如何更改 TDrawGrid 的滚动行为
- go - 如何在不缓冲的情况下记录请求正文(通过中间件)?
- php - Pass array in WhereIn and Order results by same array
- javascript - 将 CSS `backdrop-filter` 应用于多边形形状
- c# - .netcore、Razor、设备注册在 www
- java - How to make timePicker in Android Studio 3