- 坚决不要用拼字符串的方式去将参数加到 HQL 语句中去,否则会有安全问题,比如 SQL 注入。应该使用 HQL 的参数绑定功能。
- HQL 和 JPA QL 的参数绑定有两种方式,一是根据名字绑定,二是根据位置绑定。HQL 和 JPA QL 的位置参数绑定的起始值是不同的,HQL 从 0 开始,JPA QL 从 1 开始。因为 HQL 以 JDBC 为基础,而 JPA QL 以旧版的 EJB QL 为基础。
- Query 的 iterate 方法与 list 类似,不同之处在于初始的结果集仅包含主键信息。遍历时,如果结果在一级和二级缓存中均不存在。Hibernate 将执行 select 语句加载完整的对象。对于包含某些大信息量字段的记录而言,iterate 是一种优化查询的手段,前提是相应的记录使用了二级缓存。