以下代码仅用于演示目的。
我的 实体 bean看起来像这样
@Entity class Employee { @EmbeddedId private EmployeeKey employeeKey; private String firstName; private String lastName; // Other fields // Getter and Setters }
该 嵌入式 类:
@Embeddable class EmployeeKey implements Serializable { private int employeeId; private String branchName; private String departmentName; //Getter and Setters }
我可以编写 JPARepository 接口方法以通过EmbeddedId查找雇员,该方法也返回我的结果。
interface EmployeeRepository extends JpaRepository<Employee, EmployeeKey> { List<Employee> findByEmployeeKey(EmployeeKey employeeKey); }
问题: 假设在查询时我只有 employeeId 和 branchName ,并且我不想在 departmentName 上放置过滤器 __
这就是它为我工作的方式。
@Ketrox的答案是绝对正确的并且可以正常工作。但是在我的实际场景中,我有6个字段可以搜索,并且导致方法名称长于120多个字符。( 如下所示 )
List<Employee> findByEmployeeKeyField1AndEmployeeKeyField2AndEmployeeKeyField3AndEmployeeKeyField4AndEmployeeKeyField5AndEmployeeKeyField6(String field1, String field2, String field3, String field4, String field5, String field6);
当然,这还不够好看,而且还足以使Codenarc不满意。
最终,我通过示例查找,结果证明这是一个非常令人愉快的解决方案。
仓库:
//skipped lines import org.springframework.data.domain.Example //skipped lines interface EmployeeRepository extends JpaRepository<Employee, EmployeeKey>{ List<Employee> findAll(Example<Employee> employee); }
用法:
// Prepare Employee key with all available search by keys (6 in my case) EmplyeeKey key = new EmplyeeKey(); key.setField1("field1_value"); key.setField2("field2_value"); //Setting remaining 4 fields // Create new Employee ans set the search key Employee employee = new Employee(); employee.setEmployeeKey(key); // Call the findAll by passing an Example of above Employee object List<Employee> result = employeeRepository.findAll(Example.of(employee));
我已经详细说明了通过Spring Data JPA进行的搜索(部分通过@EmbeddedId查找)