gpt4 book ai didi

java - JPA 多对多

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:00 27 4
gpt4 key购买 nike

这是我创建数据库的方法:

CREATE TABLE actor(id INT PRIMARY KEY, name VARCHAR(255));
CREATE TABLE movie(id INT PRIMARY KEY, title VARCHAR(255), release_date VARCHAR(255), duration INT, type VARCHAR(255), director VARCHAR(255), category VARCHAR(255));
CREATE TABLE movie_actor(movie_id INT NOT NULL, actor_id INT NOT NULL);

这是我的java代码:

@Entity
public class Actor {
@Id
private Integer id;
private String name;
@ManyToMany(mappedBy="actorList")
private List<Movie> movieList = new ArrayList<Movie>();
//getters and setters
}

还有二等舱。

@Entity
public class Movie {
@Id
private int id;
private String title;
private String releaseDate;
private int duration;
private String type;
private String director;
@ManyToMany()
@JoinTable(name = "movie_actor", joinColumns = @JoinColumn(name = "movie_id"), inverseJoinColumns = @JoinColumn(name = "actor_id"))
private List<Actor> actorList = new ArrayList<Actor>();
@Enumerated(EnumType.STRING)
private MovieCategory category;
//getters and setters
}

存储库:

@Repository
public interface MovieRepository extends JpaRepository<Movie, Integer> {
}
@Repository
public interface ActorRepository extends JpaRepository<Actor, Integer> {
}

有人可能知道我在这里做错了什么吗?因为它不起作用。我无法使用 .findAll() 获取电影。

@编辑

我可以在 Movies 中仅使用 OneToMany 并忽略 Actor 中的任何注释吗?因为这样它就可以工作,但我不知道它是否正确。我只想显示带有 Actor 列表的电影,我不需要其他方式。但是在一部电影中可以扮演很多 Actor ,而每个 Actor 可以在很多电影中扮演,所以我认为应该是ManyToMany。

最佳答案

编辑后更新

好吧,如果您只想从一侧进行,那么这就是单向集合映射。

您可以从 Actor 和电影中删除映射,如下所示:

@OneToMany
@JoinTable(name = "movie_actor", joinColumns = @JoinColumn(name = "movie_id"), inverseJoinColumns = @JoinColumn(name = "actor_id"))
private List<Actor> actorList = new ArrayList<Actor>();

在这种设置中,@OneToMany 应该没有“mappedBy”属性。

关于java - JPA 多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com