我有sql select我想要写标准。我在谷歌搜索一段时间,但无法找到任何“不在”的东西。 我的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')
提前多多感谢。 问候, 垫
答案 0 :(得分: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);
它有效,但你认为这是一个很好的解决方案吗?
答案 1 :(得分: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