Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 使用queryDSL按属性名获取动态属性谓词_Spring_Spring Data_Spring Data Jpa_Querydsl - Fatal编程技术网

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

Spring 使用queryDSL按属性名获取动态属性谓词,spring,spring-data,spring-data-jpa,querydsl,Spring,Spring Data,Spring Data Jpa,Querydsl,我使用查询DSL生成的实体EntitySerializer,以便使用QueryDSL(与SpringData集成)查询JPA实体 我收到来自客户端属性名称的消息,我想为可以添加(和)到其他谓词的属性创建谓词 我不知道如何从EntitySerializer获取与我的属性名匹配的谓词/路径。例如,假设我们有一个Person实体(带有自动生成的QPerson类),它有一个我想要过滤的“name”属性(最后我想要创建一个泛型方法)。以下是一般方法: Public Predicat getPredicat

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

我收到来自客户端属性名称的消息,我想为可以添加(和)到其他谓词的属性创建谓词

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

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

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

new StringPath(p, propertyName)
然后可以像这样使用它来创建谓词实例

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

我做的有点不同,因为正如Timo所说,这并不简单,以下是:

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") );

这种方法应该先检查属性的类型,然后再进行切换,这还不够好。