【发布时间】:2014-03-05 10:45:51
【问题描述】:
假设我有一个这样的数据模型(伪代码):
@Entity
Person {
@OneToMany
List<PersonAttribute> attributes;
}
@Entity
PersonAttribute {
@ManyToOne
AttributeName attributeName;
String attributeValue;
}
@Entity
AttributeName {
String name;
}
我定义了一个 Spring-Data-JPA 存储库,例如:
public interface PersonRepository extends PagingAndSortingRepository<Person, Long>, QueryDslPredicateExecutor<Person>{}
我在 QueryDSL 文档中看到有一种从 Person 加入到 PersonAttribute 的机制,但看起来您需要访问 QueryDsl Query 对象,而存储库的客户端则没有。
我想用我的谓词做的是找到所有那些有一个值为“蓝色”的 AttributeValue(有一个连接)和一个名称为“eyecolor”的 AttributeName(还有另一个连接)的人。我不确定如何使用any() 来做到这一点,并强制我只得到 eye_color=blue 而不是 shoe_color=blue 的那些。
我希望我能做这样的事情:
QPerson person = QPerson.person;
QPersonAttribute attribute = person.attributes.any();
Predicate predicate = person.name.toLowerCase().startsWith("jo")
.and(attribute.attributeName().name.toLowerCase().eq("eye color")
.and(attribute.attributeValue.toLowerCase().eq("blue")));
但其中有any(),它只匹配任何具有“蓝色”属性值的东西和任何具有“眼睛颜色”属性的东西,而不管颜色如何。 如何使这些条件适用于集合中的同一属性?
【问题讨论】:
标签: java spring-data spring-data-jpa querydsl