首页 > 解决方案 > 添加新实体时休眠@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

任何建议如何解决这个问题?

标签: javasqlhibernatejava-8

解决方案


问题是@UniqueConstraint。在结构中应用更改之前,我必须恢复数据库。删除 DB 中的约束无济于事。所以正如建议的那样,我从代码中删除了这个注释并让休眠完成这项工作。现在我可以为单个用户添加多个实体。


推荐阅读