以下のコードはデモ専用です。
MyEntityBeanは次のようになります
@Entity
class Employee {
@EmbeddedId
private EmployeeKey employeeKey;
private String firstName;
private String lastName;
// Other fields
// Getter and Setters
}
Embeddableクラス:
@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 不幸にするほど十分ではありません。
最後に、find by exampleを使用しましたが、これは本当に快適なソリューションであることがわかりました。
リポジトリ:
//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によって部分的に検索 で検索を詳しく説明しました
List<Employee> findByEmployeeKeyEmployeeIdAndEmployeeKeyDepartmentName(int Id,String name);
動作するはずです クエリの派生を見てください