如果您习惯使用的标准,你可以这样
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