2011-01-05 153 views
1

我有我想写入标准的sql select。我在Google上搜索了一些时间,但无法找到任何“不在”的东西。 我的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”的用户。 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