用于findIn方法的JPA CrudRepository

时间:2016-05-19 01:35:37

标签: spring spring-boot spring-data-jpa

在一个要求中,我需要通过id在列表中找到。以下是示例。

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

现在在EmployeeController.java类中,我需要找到员工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的属性地址!

谢谢!

1 个答案:

答案 0 :(得分:2)

嗯,异常本身很清楚,它试图找到一个属性&#34;地址&#34; Employee上的Contractor不存在,因此您必须加入Address@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); 才能完成这项工作。但是,就我在reserved keywords列表中看到的情况而言,您无法通过方法命名来实现这一目标。

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

{{1}}