【发布时间】:2018-01-17 07:45:47
【问题描述】:
我正在尝试创建存储库方法,以便在访问书籍的所有作者的详细信息时显示(反之亦然)。这是多对多的关系,模型类看起来像这样:
作者(模型)类:
@Entity
@Table(name = "author")
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "author_id")
private int authorId;
@Column(name = "name")
private String name;
@Column(name = "surname")
private String surname;
@Column(name = "date_of_birth")
private Date dateOfBirth;
@Column(name = "alive")
private boolean alive;
@ManyToMany(cascade = CascadeType.ALL, mappedBy="authors")
@JoinTable(name = "book_author",
joinColumns = @JoinColumn(name = "book_id"),
inverseJoinColumns = @JoinColumn(name = "author_id"))
private Set<Book> books = new HashSet<Book>();
图书(模型)类
@Entity
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "book_id")
private int bookId;
@Column(name = "isbn")
private long isbn;
@Column(name = "title")
private String title;
@Column(name = "title_original")
private String titleOriginal;
@Column(name = "premiere_date")
private Date premiereDate;
@ManyToMany(cascade = CascadeType.ALL, mappedBy="books")
@JoinTable(name = "book_author", joinColumns = { @JoinColumn(name = "book_id") }, inverseJoinColumns = { @JoinColumn(name = "author_id") })
private Set<Author> authors = new HashSet<Author>(0);
BookRepository 类:
@Repository
public interface BookRepository extends CrudRepository<Book, Integer> {
List<Book> findByIsbn(@Param("isbn") long isbn);
List<Book> findByTitle(@Param("title") String title);
List<Book> findByTitleOriginal(@Param("titleOriginal") String titleOriginal);
@Query("SELECT b FROM Book b WHERE b.premiereDate BETWEEN :startYear AND :endYear ORDER BY b.premiereDate")
public List<Book> getBooksBetweenDate(@Param("startYear")int startYear, @Param("endYear")int endYear);
@Query("SELECT b FROM Book b JOIN b.authors a WHERE a.authorId =:idAuthor")
public List<Book> getBookAuthors(???)
我认为我的模型类和存储库中的hql 查询没问题,但我不知道如何创建方法getBookAuthors。
提前感谢您的帮助。
【问题讨论】:
-
id 没有意义,获取书籍作者是什么意思?你需要归还别人写的书吗?
-
获取图书作者,因为一本书可以有多个作者
-
检查我的答案,你想返回一本书的作者集,而不是返回书籍列表
-
我认为您的
SELECT b FROM Book b JOIN b.authors a WHERE a.authorId =:idAuthor可以正常工作。您在执行此查询时是否遇到任何错误。 -
我只是不知道现在如何使用此查询将什么参数传递给该方法
标签: java spring hibernate spring-data-jpa hql