我在MySql数据库中有两个实体。首先是 Users 实体,其次是 Movies 。我设置了关系@OneToMany
和@ManyToOne
。我的意思是,一个用户可以拥有多部电影,而几部电影可以属于一个用户。
@Data
@Entity
@Table(name = "movies", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id"})})
public class Movies {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "movie_name", nullable = false)
private String name;
@Column(name = "expirationTime")
private DateTime expirationTime;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", nullable = false)
private Users userId;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@Table(name = "user")
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "phone_number", nullable = true)
private String phoneNumber;
@Getter
@Setter
@OneToMany(mappedBy = "userId", cascade = CascadeType.ALL)
@Builder.Default
private Set<Movies> movies = new HashSet<>(0);
我可以为每个用户添加一个电影实体。当我想为该同一用户添加另一行(添加新电影)时,会收到如下异常:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '7' for key 'movies.UKno13de9csa3gf2das1j6dsa12
有人建议如何解决这个问题?
答案 0 :(得分:2)
问题是@UniqueConstraint。在对结构进行更改之前,我必须还原数据库。删除数据库中的约束没有帮助。因此,正如我建议的那样,我从代码中删除了此批注,然后让hibernate完成该工作。现在,我可以为单个用户添加多个实体。
答案 1 :(得分:0)
为什么要将零传递给集合?我怀疑这是零导致问题的原因。
private Set<Movies> movies = new HashSet<>(0);
删除零,它将起作用。
private Set<Movies> movies = new HashSet<>();
答案 2 :(得分:0)
直接从数据库中删除所有表,并让hibernate重新创建表,因为您的旧约束仍然可以存在。
删除movie
它试图强制执行one unique
条记录,只能有var serverId = client.guilds.cache.map(guild => guild.id); // getting server id
var lang = "en"; // lang
var config = readConfigFile(); //reading file from config yes there is JSON.parse
var server = {serverId : lang};
console.log(server);
config.servers = config.servers + server;
config = JSON.stringify(config);
saveConfigFile(config);
个用户行
答案 3 :(得分:0)
您对唯一约束的定义是错误的。拥有@UniqueConstraint(columnNames = {"user_id"})}
意味着用户7只能有一个电影行。您需要添加新的约束并将其设置在ID为user_id的列上。也丢掉旧的。
ALTER TABLE movies
ADD CONSTRAINT movie_user_uq
UNIQUE (id, user_id);