簡體   English   中英

如何使用 JpaRepository 和嵌套的對象列表進行搜索?

[英]How to search with JpaRepository and nested list of objects?

描述

有一個PersonRepositoryPerson實體, 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;
}

編輯:不是這篇文章的重復,因為這里是嵌套對象的集合。 不僅僅是單一的參考。

首先,將experienceInMonthsString更改為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM