Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA多对多_Java_Jpa_Many To Many - Fatal编程技术网

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一样,您可以看到它的查询或模式映射有什么问题?