JPA仕様は次のように述べています。
同様の型の値のみを比較できます。型が同じ Java 言語型に対応する場合、または一方がプリミティブ Java 言語型であり、もう一方がラッパー化された Java クラス型と同等である場合 (たとえば、int と Integer はこの意味で型に似ています)。この規則には 1 つの例外があります。数値昇格の規則が適用される数値を比較することは有効です。似ていない型の値を比較しようとする条件式は、この数値の場合を除いて許可されていません。
算術演算子と比較演算子は、Java のプリミティブ数値型に相当するラッパー Java クラスの状態フィールドと入力パラメーターに適用できることに注意してください。
同じ抽象スキーマ タイプの 2 つのエンティティは、それらが同じ主キー値を持っている場合に限り、等しくなります。
列挙型に対する等値/不等値の比較のみがサポートされる必要があります。
埋め込み可能なクラスまたはマップ エントリ タイプのインスタンスに対する比較はサポートされていません。
これは、クエリが
where entity1 = entity2
と
where entity1.id = entity2.id
常に同じ結果が得られる (そして同じパフォーマンスが得られる) べきか、それともいくつかのエッジ ケース (たとえば、エンティティの 1 つが null の場合) があるか? 動作はすべての実装で同じですか?