2014-04-04 56 views
5

在经历JPA,QueryDSL的同时,他们都包含了类型安全查询的概念。但究竟是什么呢?根据博客/文章,我想这是JPA/QueryDSL的一个特性,它在查询时验证它们的参数类型。任何查询错误都会在编译时显示,而不是运行时。我对吗?仅仅是为了这个还是我在这里错过了一些东西?类型安全查询究竟意味着什么?

回答

5

QueryDSLCriteria是在JPA中组装查询时尝试强制进行数据类型验证的库。

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

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

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

+0

哇..很好的解释兄弟你清理我的困惑......谢谢利奥.. –

4

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

  1. 在查询中使用的所有类(没有错字...)和是持久的(即,映射到一个数据库)
  2. 在查询中使用的所有属性存在该对象,并且是持久
  3. 所得查询语法有效的(没有缺失条款或关键字)
  4. 所有运营商收到一个可接受的类型的操作数

此外,表达式查询api使您的IDE能够提供代码完成(也适用于域类及其属性)和重构支持(如果属性被重命名,您可以在元模型中重命名它,并且IDE将在所有查询中重命名)。

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

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

相关问题