空のappoinmentコレクション(OneToManyによってマップされる)を持つユーザーを含むHQLクエリを生成しようとします。
_SELECT u FROM User u JOIN u.appointments uas WHERE u.status = 1 AND (uas.time.end < :date OR size(uas) = 0)
_
私はいくつかの方法でそれを試します(NOT EXIST ELEMENT(), IS NULL
)も参照してください: NHibernate(HQL)でコレクションが空かどうかを確認する方法? (これは私には機能しません)
しかし、まだ表示したくない結果や、HQLまたはSQL SERVERのエラー
注:
jOINなしのクエリは機能します。
_"FROM User u WHERE u.status = 1 AND size(u.appointments) = 0"
_
解決済み
別のJOINが問題を解決しました:
_SELECT u FROM User u LEFT JOIN u.appointments pas1 LEFT JOIN pas1.slot t WHERE u.status = 1 AND t.end <= :date1 OR t.end IS NULL ORDER BY u.name asc
_
IS EMPTY
の使用はうまくいくはずです(私はJPQL構文を支持します):
SELECT u FROM User u WHERE u.status = 1 AND u.appointments IS EMPTY
表示されない場合は、生成されたSQLを表示してください。
生成されたSQLを確認しましたか?あなたの方法はここでうまくいきます:
// Hibernate query:
const string hql = "from User u where u.Id = 101 and size(u.Appointments) = 0";
// Generates this working SQL:
select user0_.Id as Id20_,
user0_.Name as Name2_20_
from User user0_
where user0_.Id = 101
and (select count(appointment1_.Id_Solicitud)
from Appointment appointment1_
where user0_.Id = appointment1_.Id_User) = 0
// Hibernate query:
const string hql = "from User u where u.Id = 101 and size(u.Appointments) = 0";