[英]Unable to create a ManyToMany relationship between two entities
我无法在两个实体之间创建多对多关系:演员和电影。 这个想法是电影可以有多个演员,演员可以有多个电影。 当我点击一部电影时,我可以看到它的所有演员,当我点击演员时,我可以看到该演员演过的所有电影,类似于 IMDB 的工作方式。
这是我的电影 class
@Entity
@ToString
@Getter // Both getters and setters are essential in allowing JSON to be converted into a Java Obj
@Setter
@Table(name="MOVIES")
@AllArgsConstructor
@NoArgsConstructor
public class Movie {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name="MOVIE_NAME")
private String movieName;
@Column(name="YEAR_OF_RELEASE")
private short yearOfRelease;
@Column(name="DESCRIPTION")
private String description;
@Column(name="RENTAL_COST")
private double rentalCost;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="movies_actors",
joinColumns = @JoinColumn(name="movie_id"),
inverseJoinColumns =@JoinColumn(name="actor_id"))
private Set<Actor> actors;
@OneToMany(cascade = CascadeType.ALL)
private List<UserReview> userReviews;
// Constructor
public Movie(
@JsonProperty("movieName") String movieName,
@JsonProperty("yearOfRelease") short yearOfRelease,
@JsonProperty("description") String description,
@JsonProperty("rentalCost") float rentalCost,
@JsonProperty("actors") Set<Actor> actors,
@JsonProperty("userReviews") List<UserReview> userReviews
)
{
this.movieName = movieName;
this.yearOfRelease = yearOfRelease;
this.description = description;
this.rentalCost = rentalCost;
this.actors = actors;
this.userReviews = userReviews;
}
}
这是我的演员 class
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Table(name="ACTORS")
public class Actor {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer Id;
@Column(name="FIRST_NAME")
private String firstName;
@Column(name="LAST_NAME")
private String lastName;
@Column(name="GENDER")
private String gender;
@Column(name="AGE")
private byte age;
@JsonIgnore
@ManyToMany(mappedBy = "actors")
private List<Movie> movies;
}
使用 Postman,我的电影 object 可以获取演员
[
{
"movieName": "Happy Feet",
"yearOfRelease": 2022,
"description": "A penguin that is happy",
"rentalCost": 12.0,
"actors": [
{
"firstName": "Tony ",
"lastName": "Stark",
"gender": "Male",
"age": 100,
"id": 3
},
{
"firstName": "Bruce ",
"lastName": "Wayne",
"gender": "Male",
"age": 33,
"id": 2
}
],
"userReviews": [
{
"firstName": "Alex",
"lastName": "Groot",
"description": "This is a nice movie",
"rating": 8,
"movie": null,
"id": 4
}
],
"id": 1
}
]
但是当我得到所有演员时。 我无法获得该演员出演的任何电影,并且演员 obj 中的“电影”属性也丢失了。
[
{
"firstName": "Bruce ",
"lastName": "Wayne",
"gender": "Male",
"age": 33,
"id": 2
},
{
"firstName": "Tony ",
"lastName": "Stark",
"gender": "Male",
"age": 100,
"id": 3
}
]
如何解决此问题,以使电影具有演员列表 object 并且演员具有电影列表 object
@JsonIgnore 是这里的罪魁祸首,它忽略了电影列表。
我知道如果你从那里删除 jsonIgnore,你会遇到 json 的无限循环。 最好使用 json 忽略那里。
我建议不要返回实体 object,而是只返回带有您需要的数据的 DTO object。 您可以使用结果转换器直接从 Hibernate 查询/标准结果中获得一个。
您是在使用@JsonIgnore
来不将字段保留在数据库中,还是我理解错误? 如果是这种情况,也许用@Transient
替换它是个好主意,它实际上完成了上述工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.