【问题标题】:Is it possible to use Querydsl without generated query types?是否可以在不生成查询类型的情况下使用 Querydsl?
【发布时间】:2013-02-28 12:27:58
【问题描述】:

例如,JPA Criteria API 可以在不生成元模型的情况下使用。类型安全丢失了,但我可以在没有数据模型的先验知识的情况下仅在运行时使用反射来创建查询。我想以同样的方式使用 Querydsl。我不关心类型安全,因为我不知道数据模型。

在我最近的项目中,我想使用 Querydsl 主要是因为它构成了持久性之外的另一层。所以我希望可以对 JPA、JDO、JDBC、Lucene、Hibernate Search、MongoDB、Collections 和 RDFBean 使用相同的查询。

或者是否有任何替代 Querydsl 可以以所述方式使用的方法?

由于 NoSQL 数据库正在兴起。是否有任何其他框架在各种持久性提供程序上构成类似的抽象层?

【问题讨论】:

    标签: java nosql persistence jpa-2.0 querydsl


    【解决方案1】:

    有两种方法可以在没有生成元模型的情况下使用 Querydsl。

    第一种方法是手动构建表达式 http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch03.html#d0e1379

    第二个是使用Querydsl的别名功能 http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch02s07.html

    Querydsl 查询共享通用接口并且看起来很相似,但是您不能直接在不同的持久性类型上使用相同的查询,因为 Querydsl 不提供跨模块的任何查询抽象。

    查询的各个部分可以共享,例如谓词或投影,但查询与某个模块相关联。

    您可以做的是坚持使用常见的持久性抽象 JPA 或 JDO 之一,并通过它们使用 RDBMS、OODB 和 NoSQL 引擎。

    【讨论】:

    • 很遗憾 Querydsl 没有对模块提供这样的抽象。这将是非常有益的,并且可以将 Querydsl 推向“Java 生态系统中的 LINQ 替代方案”。 Querydsl 不提供这样的功能有什么特别的原因吗?为什么不同模块的查询不同?
    • LINQ 甚至提供这个功能吗?
    • Querydsl 不旨在提供任何持久性抽象,这是主要原因,主要目标是为持久性查询提供类型安全一致的语法。
    猜你喜欢
    • 2019-12-17
    • 1970-01-01
    • 2011-08-21
    • 2017-12-21
    • 2020-01-09
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2015-06-23
    相关资源
    最近更新 更多