2011-01-05 9 views
1

私は書き込み基準を必要とするsql selectを持っています。私はいくつかの時間をグーグルで聞いていたが、 "ではない"のための何かを見つけることができません。 My SQLクエリ:入れ子になった選択のための休止状態の基準

select * from users where username not in(
select users.username from users right join authorities on users.username=authorities.username 
where authority='ROLE_ADMIN') 

ありがとうございます。それが基準のクエリを作成するのは簡単ですその後 よろしく、 マット

答えて

3

感謝を答えは、これはまさにこのようなものではありません。権限 "ROLE_ADMIN"を持つすべてのユーザーを選択したので、 "ROLE_ADMIN"以外のすべてのユーザーが必要でした。一度に「ROLE_ADMIN」と「ROLE_MODERATOR」を持つユーザーが存在するため、smple「not」は機能していませんでした。私はこれを次のように解決しました:

DetachedCriteria subCriteria = DetachedCriteria.forClass(Authorities.class); 
subCriteria.add(Property.forName("authority").ne(authorityName)); 
subCriteria.setProjection(Projections.property("users")); 

DetachedCriteria criteria = DetachedCriteria.forClass(getPersistentClass()); 
criteria.add(Property.forName("username").notIn(subCriteria)); 
return getHibernateTemplate().findByCriteria(criteria); 

それはうまくいくと思いますか?

0

はあなたのHibernateマッピング

<many-to-one name="authority" class="Authority" column="AUTHORITY_ID" 

でクラスユーザのプロパティとして権威をマップする必要がありますため

List users = sess.createCriteria(User.class) 
.createCriteria("authority") 
.add(Restrictions.eq("authority_name", "ROLE_ADMIN")) 
.list