java Spring数据JPA:如何在JPA规范的左连接字段中获得不同的记录
如何用JPA规范替换下面的Hibernate查询
String hql = "select distinct m " +
"from Membership ms " +
"left join ms.member m " +
"where lower(m.lastName) = :lastName " +
"and lower(m.firstName) = :firstName " +
"and m.gender = :gender ";
这里的主要问题是,我希望在成员(这是一个左连接)对象上有一个清晰的记录,而不是成员。以下是我尝试过的:
@Override
public Specification<Member> buildSpecification(Membership m) {
Member member = m.getMember();
return (root, query, criteriaBuilder) -> {
PredicateBuilder predicateBuilder = new PredicateBuilder(criteriaBuilder);
Join<?, ?> memberJoin = root.join("member", JoinType.LEFT);
List<Predicate> predicates = predicateBuilder
.addEqualLowerPredicate(member.getLastName().toLowerCase(), memberJoin.get("lastName"))
.addEqualLowerPredicate(member.getFirstName().toLowerCase(), memberJoin.get("firstName"))
.addEqualPredicate(member.getGender(), memberJoin.get("gender"))
.getPredicates();
query.distinct(true);
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
};
}
在这里,在应用distinct之后,true为我提供了成员身份distinct对象而不是成员身份distinct对象
query.distinct(true);
所以在这里,我怎样才能得到成员distinct对象,它又是一个左连接。以下是实体结构:
@Entity
public class Membership {
private String memberId;
private Date startDate;
private Date endDate;
@ManyToOne
private Member member;
.......
......
}
@Entity
public class Member {
private String firstName;
private String lastName;
private MemberGender gender;
.......
......
}
我对JPA规范非常陌生,非常感谢您的帮助。提前感谢
共 (0) 个答案