IはOneToManyの関係を有する:HQL:ヌル関係にLIKE
public class Class1{
private String attr1;
private String attr2;
@OneToOne
private Class2 object1;
}
public class Class2{
private String attr3;
}
関係が(私はクラス1のインスタンスは、物体1にNULLを持つことができることを意味する)ヌルオブジェクトを格納することができます。私はすべてに完全な検索をしたい私は、このHQLクエリー作成しましたので、属性:
SELECT p FROM Class1 p
WHERE
(
upper(p.attr1) LIKE :filter OR
upper(p.attr2) LIKE :filter OR
upper(p.object1.attr3) LIKE :filter
)
を、私は前と後に「%」を大文字で文字列のparamを渡す:
query.setParameter("filter", "%"+filter.trim().toUpperCase()+"%");
それは、 object1 = nullのエンティティに対しては正常に機能します。それらのエンティティは決して得られません。実際に最後の条件(upper(p.object1.attr3)LIKE:フィルタ)を削除しても機能しますが、それを含める必要があります。
SELECT p FROM Class1 p LEFT JOIN p.object1 AS p1
WHERE
(
upper(p.attr1) LIKE :filter OR
upper(p.attr2) LIKE :filter OR
upper(p1.attr3) LIKE :filter
)
または
SELECT p FROM Class1 p LEFT JOIN p.object1 AS p1
WHERE
(
upper(p.attr1) LIKE :filter OR
upper(p.attr2) LIKE :filter OR
(p1 is not null AND upper(p1.attr3) LIKE :filter)
)
が、任意の成功なしのように:私のようにそれを書くことを試みたので、私はLEFTを行う必要がありますけれども、私はしました
はその関係で参加します。
ありがとうございました。
あなたが私が問題を残したコメントのために見ることができるように別のものでした。だからあなたの答えは大丈夫です(p1がヌルかどうかをチェックする必要はありませんが) – Javi