DetachedCriteria を使用してサブクエリを作成できます。
// This corresponds to (select firstname from contact where id = 1)
DetachedCriteria subquery = DetachedCriteria.forClass(Contact.class)
.add(Restrictions.eq("id", 1))
.setProjection(Projections.property("name"))
// This corresponds to (select information where name not in (subquery))
ICriteria criteria = session
.createCriteria(Information.class)
.add(Subqueries.notIn("name", subquery));
サブクエリを使用する代わりに、session.get を使用して連絡先を読み込むだけで、キャッシュにヒットする可能性があります。
Contact contact = session.Get<Contact>(1);
ICriteria criteria = session
.createCriteria(Information.class)
.add(Property.ne("name", contact.getName()));
免責事項: 私は a) Java プログラマーではなく、b) 間違いを犯した可能性があるため、コンパイルできない可能性があります。コードはアイデアを大まかに示すためのものであり、とにかく役立つことを願っています。