Jpa Repository查询一列中的多个值以及Spring boot的多对一关系

use*_*970 1 java spring hibernate jpa spring-boot

我是 JPA 存储库实施的新手,因此寻求帮助。获取具有列值条件的表项的普通 SQL 查询将是:

select * from table t where t.column in('firstvalue','secondvalue','thirdvalue') 
Run Code Online (Sandbox Code Playgroud)

是否有任何 JPA/CRUD 存储库等效于此?

对于多对一关系。

子查询将是:

select * from child_foo where foo_id in(select foo_id from foo where foo_other_value="somevalue")
Run Code Online (Sandbox Code Playgroud)

hibernate 的实现是

select * from child_foo where child_foo.foo.foo_othervalue:"somevalue"
Run Code Online (Sandbox Code Playgroud)

我想知道这些查询的 JPA 等价物是什么(在 Spring Boot 中实现)

Dam*_*sas 7

Spring 为您提供了两种在存储库中定义查询的方法。

  1. 查询方法。基本上,您可以通过为函数添加的名称来定义查询。
  2. 命名查询。在这里,您使用 @Query 注释您的方法,您可以像在 coosta 响应中那样编写JPQL查询,也可以使用 Native SQL 在注释中将 nativeQuery 设置为 true

例如对于您的查询:

select * from table t where t.column in('firstvalue','secondvalue','thirdvalue')

你可以使用:

查询方式

List<User> findAllByNameIn(List<String> names)
Run Code Online (Sandbox Code Playgroud)

是支持的关键字列表

命名查询

@Query("select u from User u where u.name in :names")
List<User> findUsersByName(List<String> names)
Run Code Online (Sandbox Code Playgroud)

原生 SQL

@Query(nativeQuery = true, value="SELECT * FROM USER WHERE NAME in ?0")
List<User> findUsersByName(List<String> names)
Run Code Online (Sandbox Code Playgroud)

对于一对多映射,您可以使用注释@OneToMany。这是有关其工作原理的指南