代码之家  ›  专栏  ›  技术社区  ›  Arun Gowda

春季数据JPA中findBy和findOneBy之间的差异

  •  32
  • Arun Gowda  · 技术社区  · 7 年前

    到目前为止,我所知道的是FindBy可以返回多个结果,而FindOneBy将返回单个结果或null,当我们按以下方式使用它时。

    List<Department> findByDepartmentName(String name);
    Department findOneByDepartmentId(Long Id);
    

    Department  findByDepartmentId(Long Id);
    

    如果是,

    • 假设给定Id有多条记录。
    • 基于什么 返回一条记录?

    最后,我什么时候或者为什么不使用findBy来代替findOneBy?

    3 回复  |  直到 7 年前
        1
  •  27
  •   hovanessyan    5 年前

    我能用吗 findBy findByDepartmentId(Long Id)

    是的,从Spring JPA的角度来看,这种语法在技术上是正确的。尽管Spring JPA通过查看

    基本上,返回类型的情况如下:

    Department findByDepartmentId(Long Id);
    

    意味着您期望一个结果(因为您指定了 实体T getSingleResult() javax.persistence.Query 接口,该接口将抛出 exception

    基于什么 findBydepartmentId

    基于有一个具有该Id的单个对象,否则它将引发异常。

    何时或为什么我不应该使用 findBy公司 findOneBy

    这两者含义不同,不能互换。

    芬登比 getSingleResult()

    findBy公司 根据上面给出的定义,根据返回类型具有不同的行为。

        2
  •  6
  •   cнŝdk    6 年前

    findOneByXX 将确保只有一个值或没有值,如果有2个值,则会引发异常。

    然而 findByXX 不进行唯一性检查。

        3
  •  5
  •   Norabal    4 年前

    find , delete By .

    https://github.com/spring-projects/spring-data-commons/blob/14d5747f68737bb44441dc511cf16393d9d85dc8/src/main/java/org/springframework/data/repository/query/parser/PartTree.java#L65 \p{Lu}.*? 部分

    因此,即使在语义上不正确,也可以定义以下方法。

    Department findAllByDepartmentId(Long Id);
    List<Department> findOneByDepartmentName(String name);