【发布时间】:2021-06-13 18:11:34
【问题描述】:
我有两节课。一部让作者参与其中的电影。还有作者本人。我想使用 EntityManager 为他们建立多对多连接,然后我可以在其中获取 Set 的数据。
类电影:
@Entity
@Table(name = "MOVIE")
@Data
public class Movie {
@Id
private Long id;
private String movieName;
@ManyToMany
@JoinTable(
name = "movie_authors",
joinColumns = @JoinColumn(name = "movie_id"),
inverseJoinColumns = @JoinColumn(name = "author_id"))
private Set<Author> authors = new HashSet<>();
public void addAuthor(Author author) {
authors.add(author);
}
}
班级作者:
@Entity
@Data
public class Author {
@Id
private String name;
@ManyToMany(mappedBy = "authors")
private Set<Movie> movies = new HashSet<>();
}
方法,我为电影添加作者并推送到数据库:
public void saveMovie() {
EntityManager em = getEntityManager();
em.getTransaction().begin();
Movie movie = new Movie();
movie.setId(1L);
movie.setMovieName("The Godfather");
Author author = new Author();
author.setName("Privet");
movie.addAuthor(author);
Author author1 = new Author();
author1.setName("Lol");
movie.addAuthor(author1);
em.persist(author);
em.persist(author1);
em.persist(movie);
em.getTransaction().commit();
}
与作者一起获取电影:
public Movie getMovie(Long movieId) {
EntityManager em = getEntityManager();
Movie movie = em.find(Movie.class, movieId);
Hibernate.initialize(movie.getAuthors());
em.detach(movie);
return movie;
}
但我得到了更多的例外:
Exception in thread "main" java.lang.StackOverflowError
at org.h2.command.Parser.readTerm(Parser.java:4303)
at org.h2.command.Parser.readFactor(Parser.java:3343)
at Movie.hashCode(Movie.java:9)
at java.base/java.util.HashMap.hash(HashMap.java:339)
at java.base/java.util.HashMap.put(HashMap.java:607)
at java.base/java.util.HashSet.add(HashSet.java:220)
at java.base/java.util.AbstractCollection.addAll(AbstractCollection.java:352)
at org.hibernate.collection.internal.PersistentSet.endRead(PersistentSet.java:355)
at Author.hashCode(Author.java:10)
at java.base/java.util.HashMap.hash(HashMap.java:339)
at java.base/java.util.HashMap.put(HashMap.java:607)
at java.base/java.util.HashSet.add(HashSet.java:220)
at java.base/java.util.AbstractCollection.addAll(AbstractCollection.java:352)
怎么了?
【问题讨论】: