JPQL中实体之间相等的语义

时间:2012-12-01 06:41:51

标签: jpa jpa-2.0

JPA规范说:

  

只允许比较相似类型的值。如果类型对应于相同的Java语言类型,或者如果一个类型是原始Java语言类型而另一个类型是   wrafolred Java类类型等价(例如,int和Integer就像这种意义上的类型)。有一个   此规则的例外情况:比较数值促销规则的数值是有效的   应用。除了之外,不允许尝试比较非类似值的条件表达式   这个数字案例。

     

请注意,允许应用算术运算符和比较运算符   状态字段和与原语等效的包装Java类的输入参数   数字Java类型。

     

当且仅当它们具有相同的主键时,相同抽象模式类型的两个实体才相等   值。

     

只需要支持枚举上的相等/不等式比较。

     

不支持比较可嵌入类或映射条目类型的实例。

这是否意味着查询

where entity1 = entity2

where entity1.id = entity2.id

应该总是给出相同的结果(并且具有相同的性能)或者是否存在一些边缘情况(例如,如果其中一个实体为空)?所有实现中的行为是否相同?

1 个答案:

答案 0 :(得分:1)

这些可能会有所不同,具体取决于您的实体来自哪里,以及您的JPA实施。

entity1 = entity2,可以允许JPA实现在某些情况下优化连接。