命名查询有两个小优点:
- 创建会话工厂时将检查其语法,从而使应用程序在出现错误的情况下快速失败(这可能表明您的应用程序缺少某些单元测试)
- 可以从多个位置访问和使用它们(无论如何这可能表示存在设计问题)
它们还有一个缺点:使用命名查询读取或调试代码时,如果不搜索其定义就无法立即查看正在执行哪个查询。
其余的实际上并不重要:
- 与实际执行查询的成本相比,将HQL查询转换为SQL的成本可以忽略不计
- 缓存查询的内存成本确实很小。请记住,Hibernate无论如何都需要在内存中存储所有实体元数据。
我倾向于在使用查询的代码中定义查询,并对它们进行单元测试。这使代码更易读,更健壮。



