当前位置: 首页 > 知识库问答 >
问题:

如何在Spring JPA存储库方法中用@Query注释描述联接

郭逸清
2023-03-14

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

现在假设我们有三个表bookauthorauthorofbook,其中最后一个表通过一个组合的主键简单地连接bookauthor。我想我们有以下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
@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);

共有1个答案

程钧
2023-03-14

您不希望authorofbook作为一个单独的实体。book应该有一个author类型的字段作为@manytoone关系。这样,给定任何,您都可以找到作者的详细信息。

 类似资料:
  • 问题内容: 是否可以访问字段值,该字段名在注释中描述,该注释在类中注释了另一个字段。 例如: 注解: 现在,是否可以从ConstraintValidator实现类中的User类访问字段密码? 编辑: 我写了这样的东西: 现在的问题是如何获取用户对象实例并比较字段值? 问题答案: 您或者需要编写一个类级别的约束,以便在其中将完整的 User 实例传递给 isValid 调用,或者可以使用类似 @Sc

  • 是否可以访问一个字段值,其中字段名在批注中描述,批注类中的另一个字段。 例如: 注释: 我写了这样的东西: 现在的问题是如何获取用户对象实例并比较字段值?

  • 我正在用Symfony制作简单的应用程序。我在这里配置了服务 我的服务使用存储库(例如,评论服务使用评论存储库),这里是的构造函数 性质 构造函数: 当我试图运行我的应用程序我得到这个错误 PHP致命错误:未捕获Symfony\Component\DependencyInjection\Exception\AutowiringFailedException:无法自动连线服务“AppBundle\R

  • 我有一个Emp表和关联的JPA实体-雇员。Emp表具有id、name和is_active列。还有一个资产表,它有对Emp表的FK引用。Assets表有id、emp_id和NAME。 附注:我知道还有其他方法,比如Hibernates的级联特性等,但我特别感兴趣的是Oracle匿名块的使用。

  • 我有一个注释@API,它分配给Java Spring中一个控制器中的所有路由,即RequestMapping。我想做的是,首先扫描一个包中用@controller注释的所有类,在扫描所有控制器类之后,我只想在这些控制器注释的类中扫描带有注释@API的方法。 我如何在Java中使用反射来实现这一点?

  • 我有这样一个代码: 存储库 服务 我想知道为什么我可以调用“interface EquipmentRepository”方法。EquipmentRepository是一个接口,对吗?