如果您習慣使用的標準,你可以這樣
Session hbSession= sessionFactory.openSession();
Criteria criteria = hbSession.createCriteria(Message.class);
criteria.createCriteria("msgUserList","userListAlias");// msgUserList is variable name of users list in Message
criteria.add(Restrictions.eq("userListAlias.user",myUser));//user is variable for User type in msgUserList's class.
List<Message> userMessages = criteria.list();
創建標準看一看this參考,同時創造條件!
如果你只想使用過濾那麼我希望你有你的User
List
一些事情配置過濾器像波紋管
由*的.hbm.xml
<hibernate-mapping package="com....">
<class name="Message" table="message_table">
....
<list name="msgUserList" inverse="true" cascade="all">
<key column="user_id" />
<one-to-many class="MessageUsers" />
<filter name="userRecipient" condition="user_id =:userParam" />
</list>
</class>
<filter-def name="userRecipient">
<filter-param name="userParam" type="User" />//User is class
</filter-def>
</hibernate-mapping>
或註釋
@Entity
@FilterDef(name="userRecipient",
[email protected](name="userParam", type="PAKAGE.User"))
@Table(name = "message_table", catalog = "your_db")
public class Message{
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "stock")
@Filter(name = "userRecipient",condition="user = :userParam")
public List<MessageUser> msgUserList;
after這一點,你就可以得到您的過濾工作
Filter filter = session.enableFilter("userRecipient");
filter.setParameter("userParam", myUser);
更新
的Filter
目的比Criteria
不同,從我的理解,你可以說,Filter
就像一個已經應用在標準你的班級或收藏有on
和off
切換。如果您的休眠會話啓用了某個篩選器,並且該篩選器的參數設置爲on
,並且與指定此篩選器的類或集合相關的所有查詢都將始終根據條件返回篩選結果。這意味着您不必每次都明確定義它,並且通過使用getEnabledFilter("filterName")
,您可以隨時更改該過濾器的參數。
濾波器
用法示例可以,如果你有Movies
表和Actor
表許多一對多的關係,就像Leonardo Dicaprio
可以在同一時間有許多影片A titanic
可以有很多演員,在這裏,當你得到Actor
顯然你將只需要這些Actor
已執行的電影,因此您可以在此處使用過濾器,該過濾器適用於在Actor
類中映射的Movies
的集合。當你Actor
對象這樣說的名字,沒有別的,並獲得簡單的標準是Movie
收集由.
操作上Actor
對象時,它會回報你僅是演員的執行電影。這也意味着,無論你如何從數據庫Actor
對象當您訪問Movie
收集Actor
它會提供你這個演員已經
標準,另一方面進行電影的時候,你從某些數據庫需要的結果,您可以使用不需要複製的條件,而不希望稍後在hibernate會話中複製它。像Actor
可以說Leonardo Dicaprio
包含Movies
是得到了他提名奧斯卡集合。這個系列將只在Actor
對象通過一定的標準一去不復返了,且能夠將不提供對已不被此條件檢索等Actor
對象。
我希望你明白過濾器和標準的基本概念,並從我對你的問題的理解會更好,如果你使用的標準!
我什麼不知道要明白的是,爲什麼我必須把@Filter上msgUserList。例如,在這裏將msgUserList過濾?我的目標是獲取msgUserList包含我的用戶的所有Message對象(MessageUser表示manyTomany關聯)。 (我想避免的標準) – jpprade
請更新答案 – Yogesh
感謝您抽出時間詳細解釋,現在更清晰! – jpprade