2011-01-05 5 views
1

У меня есть выбор sql, для которого я хочу написать критерии. Некоторое время я искал что-то, но не мог найти что-либо для «не в». 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') 

Большое спасибо заранее. С уважением, Mat

ответ

3

Спасибо за ответ, но это не совсем так. Вы выбрали всех пользователей с полномочиями «ROLE_ADMIN», и мне нужны были все пользователи, которые не являются «ROLE_ADMIN». smple «not» не работал, потому что есть пользователи, у которых есть «ROLE_ADMIN» и «ROLE_MODERATOR» за один раз. Мне удалось это решить:

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 
Смежные вопросы