用于查找方法的 JPA CrudRepository

JPA CrudRepository for findIn method

在一项要求中,我需要按 ID 在列表中查找。下面是示例。

class Employee{
   Long id;
   Contractor contractor;
}
class Contractor {
   Long id;
   List<Address> addressList;
}
class Address {
   Long id;
   String line;
}

现在EmployeeController.javaclass我需要通过员工ID和地址ID来查找。

我有如下的 CrudRepository。

interface EmployeeRepository extends CrudRepository<Employee, Long> {
   Employee findOne(Long id);

   // I want one method here that can find by employee id and address id.
   Employee findByIdAndAddress(); 
}

当我尝试运行 spring 应用程序时,出现以下异常。

PropertyReferenceException: 否 属性 找到类型为 Employee 的地址!

谢谢!

嗯,异常本身很清楚,它试图在 Employee 上找到一个 属性 "address",它不存在,所以你必须加入 ContractorAddress 来完成这项工作。但是,据我在 reserved keywords 的列表中看到的,你不能用方法命名来做到这一点。

所以解决方案是编写自己的查询,例如:

@Query("SELECT e FROM Employee e JOIN e.contractorList c JOIN c.addressList a " +
       "WHERE e.id = :id AND a.id = :addressId")
Employee findByIdAndAddress(@Param("id") Long id, @Param("addressId") Long addressId);