簡體   English   中英

嵌套選擇的休眠條件

[英]Hibernate Criteria for nested select

我有要選擇其條件的sql選擇。 我在谷歌上搜索了一段時間,但找不到“ not in”的任何內容。 我的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')  

非常感謝。 問候,墊子

感謝您的回答,但並非完全如此。 您選擇了所有具有權限“ 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);

它有效,但是您認為這是一個很好的解決方案嗎?

您應該在Hibernate映射中將權限映射為類user的屬性。

<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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM