表person對(duì)應(yīng)的model類(lèi):
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue
private Long id;
private Integer age;
private String name;
@Column(name = "nick_name")
private String nickName;
private String company;
private Date birthday;
@ManyToMany(cascade = ALL, fetch = FetchType.LAZY)
private Set<Address> addresses = new HashSet<>();
// getter and setter
}
表address對(duì)應(yīng)的model類(lèi):
@Entity
@Table(name = "address")
public class Address {
@Id
@GeneratedValue
private Long id;
private String street;
private Integer number;
@ManyToMany(mappedBy = "addresses")
private Set<Person> owners = new HashSet<>();
// getter and setter
}
數(shù)據(jù)庫(kù)訪問(wèn)PersonRepository類(lèi):
public interface PersonRepository extends JpaRepository<Person, Long>, JpaSpecificationExecutor<Person> {
}
查詢(xún)年齡在10到35之間住在"Chengdu"的人。
public List<Person> findAll(SearchRequest request) {
Specification<Person> specification = new Specifications<Person>()
.between("age", new Range<>(10, 35))
.and(StringUtils.isNotBlank(jack.getName()), ((root, query, cb) -> {
Join address = root.join("addresses", JoinType.LEFT);
return cb.equal(address.get("street"), "Chengdu");
}))
.build();
return phoneRepository.findAll(specification);
}
更多建議: