4

次のようなクエリを実行したい

Select id, name from information where name not in (select firstname from contact where id  = 1)

Information
Id Name
1  Test

Contact
id firstname
1  name
2  Test

neProperty() 関数を使用している場合、レコードは次のように返されます。name != Test.

休止状態基準を使用して実装するにはどうすればよいですか?

ありがとう

4

2 に答える 2

13

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) 間違いを犯した可能性があるため、コンパイルできない可能性があります。コードはアイデアを大まかに示すためのものであり、とにかく役立つことを願っています。

于 2012-09-28T09:23:42.123 に答える
4

すべて選択基準を作成します。

Criteria cr = session.createCriteria(Your.class); 
List list = cr.list(); 

次に、制限を追加できます。つまり、列1 = 8などは次のようになります。

cr.add(Restrictions.eq("YourCondition", YourCondition));

最後に、次のように not in 句を指定できます。

cr.add(Restrictions.not(Restrictions.in("YourNotInCondition", YourNotInCondition)));
于 2012-09-28T09:20:39.530 に答える