使用QueryDSL以类型安全的方式访问属性

时间:2013-10-29 10:01:45

标签: querydsl

我已经在一个项目中使用了QueryDSL,并且想知道我是否可以(ab)使用它来使我的POJO-to-JSON转换类型安全。目前我这样做:

  

converter.toJson(entity,entity.getDetail(),“detail”);

我认为如果我可以改变它会很酷:

QEntity q = QEntity.entity;
converter.toJson(entity, q.detail);

然后,在 toJson 方法中使用 q.detail 参数提取属性的名称,并调用实体上的getter来检索值。应该可以使用 EntityPathBase.getType()。getSimpleClassName()并使用反射来获取getter,但我想知道这是否是QueryDSL可以做的事情。

结果我使用 Path.getMetadata()。getName(),它在查询实体上可用,并返回给定示例中的属性名称。结合 BeanMap 来检索属性值(由Timo建议,谢谢!)。现在我不必将getter调用与字符串同步。当然,现在使用反射是牺牲一些性能以获得更好的可维护性。

1 个答案:

答案 0 :(得分:1)

你可以使用Querydsl Collections GuavaHelpers class http://www.querydsl.com/static/querydsl/3.2.4/apidocs/com/mysema/query/collections/GuavaHelpers.html

做类似的事情

虽然我不确定在这种情况下是否需要类型安全,因为您的目标模型(JSON)不是静态类型的。

如果您的用例是将bean属性复制到JSON结构,我可能只是在这种情况下使用Bean辅助类(如BeanMap)。