如何使用JpaRepository和嵌套的对象列表进行搜索?
说明如何使用JpaRepository和嵌套的对象列表进行搜索?
有一个PersonRepository
和Person
实体, 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,因为这里是嵌套对象的集合。不只是单一的参考。
回答:
首先,将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);
以上是 如何使用JpaRepository和嵌套的对象列表进行搜索? 的全部内容, 来源链接: utcz.com/qa/266814.html