Java JPA多对多
以下是我创建数据库的方法:Java JPA多对多,java,jpa,many-to-many,Java,Jpa,Many To Many,以下是我创建数据库的方法: 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 TABL
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
}
@实体
公共级演员{
@身份证
私有整数id;
私有字符串名称;
@许多(mappedBy=“actorList”)
private List movieList=new ArrayList();
//接球手和接球手
}
二等舱
@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
}
@实体
公映{
@身份证
私有int-id;
私有字符串标题;
私有字符串释放日期;
私有整数持续时间;
私有字符串类型;
私有字符串控制器;
@许多
@JoinTable(name=“movie\u actor”,joinColumns=@JoinColumn(name=“movie\u id”),inverseJoinColumns=@JoinColumn(name=“actor\u id”))
private List actorList=new ArrayList();
@枚举(EnumType.STRING)
私人电影类别;
//接球手和接球手
}
存储库:
@Repository
public interface MovieRepository extends JpaRepository<Movie, Integer> {
}
@Repository
public interface ActorRepository extends JpaRepository<Actor, Integer> {
}
@存储库
公共接口MovieRepository扩展了JpaRepository{
}
@存储库
公共接口ActorRepository扩展了JpaRepository{
}
也许有人知道我做错了什么?因为它不起作用。我无法使用.findAll()
获取电影
@编辑
我可以在
电影中只使用一部电影
,而忽略演员
中的任何广告符号吗?因为它是这样工作的,但我不知道它是否正确。我只想显示演员名单的电影,我不需要它的其他方式。但是在一部电影中可以扮演很多演员,每个演员都可以扮演很多电影,所以我认为应该有很多。编辑后更新
好的,如果您只想从一侧进行,那么这是一个单向集合映射
您可以从演员和电影中删除映射,如下所示:
@OneToMany
@JoinTable(name = "movie_actor", joinColumns = @JoinColumn(name = "movie_id"), inverseJoinColumns = @JoinColumn(name = "actor_id"))
private List<Actor> actorList = new ArrayList<Actor>();
@OneToMany
@JoinTable(name=“movie\u actor”,joinColumns=@JoinColumn(name=“movie\u id”),inverseJoinColumns=@JoinColumn(name=“actor\u id”))
private List actorList=new ArrayList();
在这种设置中,@OneToMany应该没有“mappedBy”属性。编辑后更新
好的,如果您只想从一侧进行,那么这是一个单向集合映射
您可以从演员和电影中删除映射,如下所示:
@OneToMany
@JoinTable(name = "movie_actor", joinColumns = @JoinColumn(name = "movie_id"), inverseJoinColumns = @JoinColumn(name = "actor_id"))
private List<Actor> actorList = new ArrayList<Actor>();
@OneToMany
@JoinTable(name=“movie\u actor”,joinColumns=@JoinColumn(name=“movie\u id”),inverseJoinColumns=@JoinColumn(name=“actor\u id”))
private List actorList=new ArrayList();
在这种设置中,@OneToMany应该没有“mappedBy”属性。现在,当我想显示所有电影时,它会显示列表中第一部电影的垃圾邮件:/Show me您的查询如果您只想使用JpaRepository的.findAll(),那么您可能需要在更新后将@manytomy(fetch=FetchType.EAGER)添加到您的mappingOk中,是的,这是一个单向集合映射。查看我更新的psotIt now display spam of first Movie from list当我要显示所有电影时显示垃圾邮件:/Show me your Queryi如果您只想使用JpaRepository的.findAll(),那么您可能需要将@manytomy(fetch=FetchType.EAGER)添加到您的映射中。更新后,确定这是单向集合映射。查看我的更新PSOTW调试在哪里?就像查看JPA提供程序调用的SQL一样,您可以看到它的查询或模式映射有什么问题?调试在哪里?就像查看JPA提供者调用的SQL一样,您可以看到它的查询或模式映射有什么问题?