首页 > 解决方案 > 如何使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<>();

}

我想让标题唯一,但不在表中的队列中,我需要用户的唯一标题。用户不应有与该用户的其他任务相同的标题的任务。

标签: javaspringhibernatejpa

解决方案


您正在寻找的组合是基于 taskTitle + 用户组合的任务应该是唯一的:您必须将其添加到Task表中:您可以使用注释来做到这一点

 @Table(
    name="UNQ_CONSTRAINT_NAME", 
    uniqueConstraints=
        @UniqueConstraint(columnNames={"title", "user_id"})
 )
 public class Task{
     //...
 }

这样,您将永远不会在Task表中获得具有相同标题 + 用户的双行


推荐阅读