我在mysql数据库中有两个实体。首先是用户实体,其次是电影。我设置关系 @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
如何解决这个问题有什么建议吗?
4条答案
按热度按时间iq3niunx1#
直接从数据库中删除所有表,让hibernate重新创建这些表,因为旧的约束仍然存在。
拆下
uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id"})
它试图强制执行movie
记录只能有one unique
用户行ie3xauqp2#
问题是@uniqueconstraint。在结构中应用更改之前,我必须恢复db。删除db中的约束没有帮助。所以我建议从代码中删除这个注解,让hibernate来完成这项工作。现在我可以为单个用户添加多个实体。
lzfw57am3#
你为什么把零传给片场?我怀疑是零导致了这个问题。
去掉零点,它就会工作。
4bbkushb4#
你对唯一约束的定义是错误的。有
@UniqueConstraint(columnNames = {"user_id"})}
意味着用户7只能有一个电影行。您需要添加新的约束并将其设置在列id、用户id上。同时删除旧的约束。