[英]How to search with JpaRepository and nested list of objects?
描述
有一個PersonRepository
和Person
實體, Person
類包含List<Qualification>
。 Qualification
類有3個簡單的字段。
我嘗試在自定義方法上添加@Query
注釋並使用 JPQL 來獲取結果,但是Qualification
類字段不可用於在 JPQL 中進行操作,因為它的存儲庫本身包含List<Qualification>
而不僅僅是一個簡單的Qualification
字段。
如何通過這些 Qualification 的嵌套字段進行搜索?
詢問
現在我需要找到資格的 ExperienceInMonths 大於 3 且小於 9 且資格的名稱字段 = 'java' 的人員實體列表。
代碼
人.java
@Data
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
@NotEmpty
@Size(min = 2)
private String name;
@NotEmpty
@Size(min = 2)
private String surname;
@ElementCollection(targetClass = java.util.ArrayList.class, fetch = FetchType.EAGER)
private List<Qualification> qualifications = new ArrayList<>();
}
PersonRepository.java
@Repository
public interface PersonRepository extends JpaRepository<Person, String> {
}
資質.java
@Data
@AllArgsConstructor
public class Qualification implements Serializable {
@Id @GeneratedValue
private String id;
private String name;
private String experienceInMonths;
}
編輯:不是這篇文章的重復,因為這里是嵌套對象的集合。 不僅僅是單一的參考。
首先,將experienceInMonths
從String
更改為int
(否則您無法將字符串與數字進行比較)。 然后你可以嘗試使用這個“香腸”:
List<Person> findByQualifications_experienceInMonthsGreaterThanAndQualifications_experienceInMonthsLessThanAndName(int experienceGreater, int experienceLess, String name);
或者你可以嘗試使用這個非常好的方法:
@Query("select p from Person p left join p.qualifications q where q.experienceInMonths > ?1 and q.experienceInMonths < ?2 and q.name = ?3")
List<Person> findByQualification(int experienceGreater, int experienceLess, String name);
W 可以在方法名稱中使用“_”(下划線)字符來定義 JPA 應該嘗試拆分的位置。
在這種情況下,我們的方法名稱將是
List<Person> findByQualification_name(String name);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.