Я использую Spring-Boot с JPA и серверной частью MySQL.Теперь я запутался в репозиториях, которые предоставляет Spring-Boot.Я знаю, что они довольно мощные (и, кажется, весьма полезны, поскольку они могут значительно сократить ваш код).Тем не менее, я не понимаю, как представлять объединения в них, так как набор результатов должен быть комбинацией указанных атрибутов в выборе нескольких сущностей.
Теперь давайте предположим, что у нас есть три таблицы Book
,Author
, AuthorOfBook
, где последний просто соединяет Book
и Author
с помощью комбинированного первичного ключа.Я думаю, у нас были следующие Java-классы:
Книга сущностей:
@Entity
@Table(name="BOOK")
public class Book {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int id;
@Column(name = "TITLE")
private String title;
}
Автор сущности
@Entity
@Table(name="AUTHOR")
public class Author {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int id;
@Column(name = "LASTNAME")
private String lastname;
@Column(name = "FIRSTNAME")
private String firstname;
//Let's assume some getters and setters and a constructor
}
Entity AuthorOfBook:
@Entity
@Table(name="BOOK")
public class Book {
@EmbeddedId
private AuthorOfBookId pk;
}
Встроенный идентификатор
@Embeddable
public class AuthorOfBookId implements Serializable {
private int authorId;
private int bookId;
}
Репозиторий
@Repository
public interface AuthorOfBookRepository extends JpaRepository<,AuthorOfBookId> {
}
Теперь, как бы я представил этот запрос:
SELECT b.name, a.firstname, a.lastname from AuthorOfBook ab inner join Book b on b.id = ab.book_id inner join Author a on a.id = ab.author_id where a.lastname = :lastname;
в моем хранилище?Я знаю, что подпись должна быть как
@Query([the query string from above])
public (...) findAuthorAndBookByAuthorLastname(@Param("lastname") String lastname);
, но я не могу понять, на что будет похож тип возврата.Что этот метод возвращает?(просто AuthorOfBook
не будет работать, я думаю)