类型安全查询到底意味着什么?

时间:2014-04-04 10:26:29

标签: sql hibernate jpa querydsl

在通过JPA,QueryDSL时,他们都包含了类型安全查询的概念。但究竟是什么呢?根据博客/文章,我想JPA / QueryDSL的一个功能是在进行查询时验证它们的参数类型。而且查询的任何错误都会在编译时而不是运行时显示出来。我对吗?这只是为了这个还是我在这里错过了什么?

2 个答案:

答案 0 :(得分:8)

如果API利用编程语言的类型系统来防止类型错误,则API是类型安全的。具体来说,QueryDSL使编译器能够验证

  1. 查询中使用的所有类(没有拼写错误...)并且是持久的(即映射到数据库)
  2. 查询中使用的所有属性都存在于该对象中,并且是持久的
  3. 生成的查询在语法上有效(没有遗漏的子句或关键字)
  4. 所有运营商都接收可接受类型的操作数
  5. 此外,富有表现力的查询api使您的IDE能够提供代码完成(也适用于域类及其属性)和重构支持(如果重命名属性,您只需在元模型中重命名它,IDE将重命名在所有查询中。)

    作为附带好处,编写包含SQL注入漏洞的查询非常困难。

    简而言之,在没有静态元模型的情况下使用QueryDSL而不是JPQL(或JPA critieria查询)可以更快地编写或更改查询,并且不易出错。

答案 1 :(得分:7)

QueryDSLCriteria是在JPA中汇编查询时尝试强制执行数据类型验证的库。

仅仅因为JPQL只是一个仅在执行时验证的查询,所以很容易编写编译器未检测到的无效查询。当然,在编写代码时修复内容比在运行应用程序时更快。

当然,QueryDSL或Criteria都不能保护您的查询免受各种错误(数据类型相关与否)的影响,但它比JPQL更安全。

另一方面,在JPQL中编写查询可以更容易,更快捷。总是权衡: - )