例如,可以在没有生成元模型的情况下使用JPA Criteria API。类型安全性已丢失,但我可以在运行时仅使用反射而无需事先了解数据模型的情况下创建查询。我想以同样的方式使用Querydsl。我并不关心类型安全,因为我无论如何都不知道数据模型。
在我最近的项目中,我想主要使用Querydsl,因为它构成了持久性的另一层。所以我希望在 JPA,JDO,JDBC,Lucene,Hibernate Search,MongoDB,Collections和RDFBean 上使用相同的查询。
或者Querydsl有替代品可以用上述方式使用吗?
由于NoSQL DB正在增加。是否有其他框架构成了各种持久性提供者的类似抽象层?
答案 0 :(得分:5)
有两种方法可以在没有生成元模型的情况下使用Querydsl。
第一种方法是手动构建表达式 http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch03.html#d0e1379
,第二个是使用Querydsl的Alias功能 http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch02s07.html
Querydsl查询共享公共接口并且看起来很相似,但是您不能直接在不同的持久性类型上使用相同的查询,因为Querydsl不提供跨模块的任何查询抽象。
可以共享查询的各个部分,例如谓词或投影,但查询与某个模块相关联。
您可以做的是坚持使用常见的持久性抽象JPA或JDO,并通过它们使用RDBMS,OODB和NoSQL引擎。