java - 如何在 Spring JPA Repository 方法中使用 @Query 注释来描述连接

标签 java spring spring-data-jpa

我正在将 Spring-Boot 与 JPA 和 MySQL 后端结合使用。现在我对 Spring-Boot 提供的存储库感到非常困惑。我知道它们非常强大(并且似乎非常有用,因为它们可以大大缩短您的代码)。不过,我不明白如何在其中表示联接,因为结果集应该是选择几个实体中指定属性的组合。

现在假设我们有三个表 BookAuthorAuthorOfBook,其中最后一个表只是连接 Book code> 和 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
}

实体AuthorOfBook:

@Entity
@Table(name="BOOK")
public class Book {
  @EmbeddedId
  private AuthorOfBookId pk;
}

嵌入式 ID

@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);

但我无法确定返回的 Type 会是什么样子。该方法返回什么? (我猜 AuthorOfBook 根本不起作用)

最佳答案

您不希望 AuthorOfBook 作为单独的实体。 Book 应该有一个 Author 类型的字段作为 @ManyToOne 关系。这样,对于任何Book,您都可以找到作者的详细信息。

关于java - 如何在 Spring JPA Repository 方法中使用 @Query 注释来描述连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53732978/

相关文章:

java - 在struts2操作类中获取json数据为null

java - 如何与 Hibernate 和 Kotlin 建立正确的 ManyToMany 关系? (获取 BeanCreationException)

java - Spring JPA中调用oracle函数

java - 提取个人 bibo :Articles from RDF document

java - Android ListView - 奇怪的回收行为

java - 如何使用 Java 执行多个 UNIX 命令并捕获单个输出或错误(如果有)

java - Spring 存储库下载错误 servlet-api.jar 的问题

java - 使用 TestNG 从 selenium 测试用例中的页面对象调用方法时如何修复 NullPointerException 错误?

mysql - 连接 MySQL 中的三个表并获取每个 id 一行(第一个表中每个实体一行)

java - JPA映射导致创建表错误