使用queryDSL按属性名称获取动态属性谓词

时间:2012-11-14 12:43:34

标签: spring spring-data spring-data-jpa querydsl

我使用Query DSL生成的实体EntitySerializer,以便使用QueryDSL(与SpringData集成)查询JPA实体。

我从客户端属性名称收到,我想为可以添加(AND)到其他谓词的属性创建谓词。

我不知道如何从EntitySerializer获取与我的属性名称匹配的谓词/路径。例如,假设我们有一个Person实体(带有自动生成的QPerson类),带有一个我想要过滤的“name”属性(最后我想创建一个泛型方法)。这是通用方法:

Public Predicat getPredicatByPropertyName(String propertyName)  {
      QPerson p = QPerson.person;
      person.getPredicat(“propertyName”).like(“tom”);
}

2 个答案:

答案 0 :(得分:3)

要创建String类型属性,只需使用以下代码段

new StringPath(p, propertyName)

然后可以像这样使用来创建Predicate实例

new StringPath(p, propertyName).like("tom")

答案 1 :(得分:2)

我做的略有不同,因为蒂莫说没有直接工作,这就是:

query.from(play);
query.where( Expressions.stringPath(play, "name").eq("New play") );

我知道也可以通过单独进行来实现:

StringPath column = Expressions.stringPath(play, "name");

query.from(play);
query.where( column.eq("New play") );