嗯,首先:我发现了这个问题:
What to use: JPQL or Criteria API?
从其他搜索中我认为标准api的唯一好处是可以检查查询,如果不正确,则返回编译器错误。 这样对吗? 如果不是,哪些是使用JPQL或Criteria Api的优势和劣势?
P.S。:问题出现在另一个问题之后:
https://stackoverflow.com/questions/8342955/error-in-criteriaquery 当我在20分钟内使用JPQL执行正确的方法时,我发现难以解决这个问题......
答案 0 :(得分:0)
我认为你问的是当 你考虑一个Criteria Query时。 我将进一步假设您正在使用Application Server。
Criteria API的存在允许以类型安全的方式构造动态SQL查询,以防止SQL注入。否则,您将SQL字符串连接在一起,这既容易出错又存在安全风险:即SQL注入。这是您唯一想要使用Criteria API的时间。
如果查询基本保持相同但只需要接受不同的参数,则应使用注释的@NamedQueries,它更简单,预编译,可以缓存在二级缓存中,并在服务器启动期间进行验证。
这基本上是关于Criteria Queries与@NamedQueries的经验法则。根据我的经验,您很少需要Criteria API,但它很好,它存在于需要的极少数时间。
希望这会有所帮助。