java - 添加新实体时休眠@OneToMany异常
问题描述
我在 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
任何建议如何解决这个问题?
解决方案
问题是@UniqueConstraint。在结构中应用更改之前,我必须恢复数据库。删除 DB 中的约束无济于事。所以正如建议的那样,我从代码中删除了这个注释并让休眠完成这项工作。现在我可以为单个用户添加多个实体。
推荐阅读
- pentaho - 我无法在 Pentaho 8.3 Kettle 中选择应用程序类型
- c++ - 关于向量的边界/限制找到二维向量的相邻邻居
- wso2 - 用于 OIDC 的 WSO2 5.9 用户信息端点
- r - 没有值列时的 pivot_wider
- java - 在 Eclipse 中添加 .class 文件
- esper - 在 Esper 中计算具有燃烧期的递归 EMA
- linux - 了解 Redhat Yum 镜像问题
- ios - 检查按钮是否有设置图像
- javascript - React Setstate 在 JSON 化后使我的状态项未定义
- reactjs - 反应引导表不改变 sizePerPageList