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

说明如何使用JpaRepository和嵌套的对象列表进行搜索?

有一个PersonRepositoryPerson实体, Person类包含List<Qualification>Qualification类有3个简单的字段。

我尝试添加自定义方法@Query注释和使用JPQL得到的结果,但Qualification类领域是不可用于操纵JPQL因为库本身包含List<Qualification>代替的Qualification只是一个简单的领域。

如何通过这些Qualification的嵌套字段进行搜索?

查询

现在我需要找人实体的列表,其中合格的experienceInMonths大于3小于9和资格的名字字段='Java的。

代码

Person.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> {

}

Qualification.java

@Data 

@AllArgsConstructor

public class Qualification implements Serializable {

@Id @GeneratedValue

private String id;

private String name;

private String experienceInMonths;

}

编辑:不重复的this post,因为这里是嵌套对象的集合。不只是单一的参考。

回答:

首先,将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);

以上是 如何使用JpaRepository和嵌套的对象列表进行搜索? 的全部内容, 来源链接: utcz.com/qa/266814.html

回到顶部