Aru*_*wda 16 java hibernate jpa-2.0 spring-data-jpa spring-boot
到目前为止,我所知道的是FindBy可以返回多个结果,而FindOneBy将返回单个结果,或者当我们按照以下方式使用它时为null.
List<Department> findByDepartmentName(String name);
Department findOneByDepartmentId(Long Id);
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是,我可以用这种方式使用findBy吗?
Department findByDepartmentId(Long Id);
Run Code Online (Sandbox Code Playgroud)
如是,
最后,何时或为什么我不使用findBy代替findOneBy?
hov*_*yan 15
我可以用
findBy这种方式吗?部门findByDepartmentId(Long Id);
是的,从Spring JPA的角度来看,这种语法在技术上是正确的.虽然Spring JPA也会通过查询返回类型来推断您尝试实现的内容.
基本上这些是返回类型的情况:
与查询要返回一个值-您可以指定basic type,Entity T,Optional<T>,CompletableFuture<T>等.
话虽如此,您的查询定义:
Department findByDepartmentId(Long Id);
Run Code Online (Sandbox Code Playgroud)
表示您期望单个结果(因为您已将单个实体指定为返回类型).这将反映Spring JPA如何执行查询 - 它将调用接口,如果多个对象满足条件,将抛出Entity T该getSingleResult()接口javax.persistence.Query.
在什么基础上
exception返回单个记录?
在有一个具有该Id的单个对象的基础上,否则它将抛出异常.
什么时候或为什么不用
findBydepartmentId代替findBy?
这两者具有不同的含义,不可互换.
findOneBy总是导致findOneBy被调用.
getSingleResult() 根据返回类型有不同的行为 - 根据上面给出的定义.
小智 7
findOneByXX 将确保只有一个值或没有值,如果有 2 个值将抛出异常。
但是findByXX,不会进行这种唯一性检查。
小智 7
我做了一些测试,Spring Data 忽略了方法 ( find, delete,...) 和之间的所有字符By。
Spring Data 仅使用返回类型来决定如何处理响应。
因此,即使语义上不正确,也可以定义以下这些方法。
Department findAllByDepartmentId(Long Id);
List<Department> findOneByDepartmentName(String name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16627 次 |
| 最近记录: |