2

HQL 式が null セーフかどうかを知りたいですか? たとえば、次の名前付きクエリを考えてみましょう

SELECT a
FROM A a
where a.f=:f

ここで、f は String、Double、Date などのタイプのフィールドです。次に、次のように使用します。

session.getNamedQuery("myNamedQuery").setString("f", myFValue).uniqueResult();

af と myFValue の両方が null の場合は条件を true にし、そのうちの 1 つだけが null の場合は false にする必要があります。

nullセーフでない場合、どうすればそれを処理できますか?

よろしく

4

5 に答える 5

1

いいえ、null セーフではありません。それらは SQL に直接変換され、同じ規則に従います。したがって、null をテストする場合は、を使用する必要がありますis [not] null

したがって、f パラメータが null になる可能性がある場合は、2 つの異なる HQL クエリを使用するか、動的に構築するか、Criteria クエリを使用して動的クエリを構築する必要があります。

于 2013-06-10T06:58:06.903 に答える
0

is nullまたはを使用する必要がありますis not nullOracle列のHQL「is null」および「!= null」を参照してください

于 2013-06-10T06:57:50.450 に答える
0

これらはヌルセーフではありません。

HQL は HQL クエリを SQL に変換し、パラメータを置き換えます。したがって、param = からクエリを書き換えません。to パラメータが null です。

Criteria APIに移動して使用するRestrictions.isNull("f");

于 2013-06-10T06:59:11.167 に答える
0

これらはヌルセーフではありません。基準を使用すると、これでうまくいきます

public static void addNullSafeEqualsRestriction(Criteria criteria, String propertyName, Object object) {
    if (object == null) {
        criteria.add(Restrictions.isNull(propertyName));
    } else {
        criteria.add(Restrictions.eq(propertyName,object));
    }
}
于 2014-01-24T00:22:04.067 に答える