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

Noa*_*evo 3 spring querydsl spring-data spring-data-jpa

我使用 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”);
}
Run Code Online (Sandbox Code Playgroud)

M.O*_*vio 6

我的做法略有不同,因为正如蒂莫所说,工作并不简单,如下所示:

query.from(play);
query.where( Expressions.stringPath(play, "name").eq("New play") );
Run Code Online (Sandbox Code Playgroud)

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

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

query.from(play);
query.where( column.eq("New play") );
Run Code Online (Sandbox Code Playgroud)


Tim*_*per 5

要创建字符串类型的属性,只需使用以下代码段

new StringPath(p, propertyName)
Run Code Online (Sandbox Code Playgroud)

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

new StringPath(p, propertyName).like("tom")
Run Code Online (Sandbox Code Playgroud)