我使用Query DSL生成实体EntitySerializer以便使用QueryDSL查询JPA实体(与SpringData集成)。
我从客户端接收属性名称,并希望为这些属性创建 predicate ,这些 predicate 可以添加(AND)到其他 predicate 中。
我不知道如何从EntitySerializer获取与我的属性名称匹配的 predicate /路径。例如,假设我们有一个Person实体(带有自动生成的QPerson类),该实体带有一个“name”属性,我希望根据该属性进行筛选(最后,我希望创建一个泛型方法)。以下是泛型方法:
Public Predicat getPredicatByPropertyName(String propertyName) {
QPerson p = QPerson.person;
person.getPredicat(“propertyName”).like(“tom”);
}
3条答案
按热度按时间w8f9ii691#
要创建字符串类型的属性,只需使用以下代码段
然后可以像这样使用它来创建 predicate 示例
2skhul332#
我这样做略有不同,因为正如蒂莫说,没有工作直截了当,这里是:
我知道,也可以通过单独执行以下操作来实现:
3qpi33ja3#
在QueryDSL 5.0中,我发现了两种独立于列类的方法:
第一种方式:仅使用反射:
注意:我使用 ComparableExpressionBase 类是因为它由我找到的所有“路径类”扩展,并且它还可以在select、orderBy和其他函数中用于构建查询
第二种方式:使用反射和ExpressionUtils:
注意:用这种方法我们首先得到表see this answer for an explanation on how to get a parametrized type的实体的类,然后得到路径的类,最后用ExpressionUtils.path方法得到路径。