我已经有一个用户模型了。现在我已经创建了一个movie_added_by电影模型,我的要求是,每当任何现有的用户要添加任何电影时,user_id和_id将存储在表中。
这里,movie_added_by用户模型需要将一个映射到多个,类似地,电影将映射到movie_added_by。
为了更好地理解,您可以参考DB图。

我真的不知道如何使用hibernate注释
用户模型如下所示:
@Getter
@Setter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id", unique = true, nullable = false)
private Integer user_id;
private String name;
} 电影模型是这样的:
@Getter
@Setter
public class Movie implements Serializable
{
private static final long serialVersionUID = -6790693372846798580L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "movie_id", unique = true, nullable = false)
private Integer movie_id;
private String movie_name;
} 发布于 2021-01-15 11:53:23
您可能希望在实体之间创建@ManyToMany关系。有两种方法(使用中间表显式创建或由Hibernate创建)。
在简单的方法中,您的实体如下所示:
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id", unique = true, nullable = false)
private Integer user_id;
private String name;
@ManyToMany(cascade = CascadeType.Persist)
@JoinTable(name="user_movie",
joinColumns = {@JoinColumn(name="user_id")},
inverseJoinColumns = {@JoinColumn(name="movie_id)})
private Set<Movie> movies = new HashSet<>();
}
public class Movie implements Serializable
{
private static final long serialVersionUID = -6790693372846798580L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "movie_id", unique = true, nullable = false)
private Integer movie_id;
private String movie_name;
@ManyToMany(cascade = CascadeType.Persist, mappedBy = "movies" //field from the user class responsible for mapping)
private Set<User> users = new HashSet<>()
} 因此,基本上在这里,您告诉Hibernate创建一个中间表,并保持在这两个实体的相关id。这里还有几个注意事项:
( a)您可能希望将id变量类型从Integer更改为Long,以防实体增长;
( b)如果使用@Id对列进行注释,则不必在列注释中使用unique=true和nullable = false;
c)记住实现非args构造函数;
( d)记住从equals()、hashCode()和toString()方法中排除关系文件;
还有一种方法,您可以显式地为表保持关系创建一个模型。当您需要在“relationship”表中保存更多数据时,这可能变得非常方便。在这种情况下,您的实体如下所示:
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id", unique = true, nullable = false)
private Integer user_id;
private String name;
@OnetToMany(cascade = CascadeType.PERSIST, mappedBy = "user")
private Set<AddedMovie> addedMovies = new HashSet<>()
}
public class Movie implements Serializable
{
private static final long serialVersionUID = -6790693372846798580L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "movie_id", unique = true, nullable = false)
private Integer movie_id;
private String movie_name;
@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "movie")
private Set<AddedMovie> moviesAddedByUser = new HashSet<>();
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
public class AddedMovie{
@Id
@GeneratedValue
private Long id;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "user_id")
private User user;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "movie_id")
private Movie movie;
// sine this entity has now its own lifecycle, you can add more fields here
private Integer rating;
private LocalDateTime movieAddedOn;
}https://stackoverflow.com/questions/65735268
复制相似问题