实体对象作为HQL参数

时间:2013-06-20 10:06:39

标签: java sql hibernate parameters hql

我有以下问题,Hibernate documentation未涵盖。或者我在那里找不到答案。谷歌搜索也没有给我详细信息。

如果我们使用Entity对象作为参数并使用Query.setParameter将其绑定到HQL,接下来会发生什么?

  • hibernate是否仅使用映射参数对象的实体ID来构建SQL'where'查询?
  • 或者Hibernate使用一些额外的逻辑(可能在某些情况下),但不仅限于ID?例如,hibernate在SQL中添加不是主键的其他字段。
  • 将分离的Entity对象用作参数是否很危险?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

就SQL而言,它只是使用id进行比较。您绑定的实体不必在该会话中进行管理,因为您的问题的评论建议。

基本上发生的事情是Hibernate将尝试解析它给出的实体实例的实体类型。然后,它将使用该类型绑定JDBC参数值,该参数值将仅写入标识符。因此,这里的假设是实体实例可以解析为其“实体类型”。在大多数情况下,这通常很容易。在Hibernate特定的“实体名称”功能的情况下变得困难的地方。