关于hibernate关联查询的条件问题

我现在有两个类
[code="java"]
public class UserInfo {

private int userId;
private String name;
private String password;
private IdCard idCard;
private Set messages;

[/code]
[code="java"]
public class Message {

private int msgId;
private String ttl;
private String desc;
private Date date;
private UserInfo user;    
private int version;

[/code]

我想在查询的时候通过UserInfo获取Message,然而要通过Date进行限制,也就是说我想通过user.getMessage()得到message,这些message要符合一些条件比如说日期都是2009/03/30日之前的;
之前无论我怎么做通过user.getMessage()得到的都是数据库里面的所有message信息,请教各位如何解决这个问题,谢谢了

给你个 例子

 


 ...
 
 
 
 ...
 


 ...
 
  
  
  
 

Session session = ...;
session.enabledFilter("effectiveDate").setParameter("asOfDate", new Date());
List results = session.createQuery("from Employee as e where e.salary > :targetSalary")
.setLong("targetSalary", new Long(1000000))
.list();

这个直接写应该是不行的,
[quote]message要符合一些条件比如说日期都是2009/03/30日之前的[/quote]

你可以在UserInfo中在写个方法
public Set getMessageWhere( String arg){
Set message=user.getMessage();
Set messageTemp=new HashSet();
for(Message m:message ){

    if(m.getDate()<=arg){

     messageTemp.put(m);

     }

}

return messageTemp;

}

上面是伪代码,

你也可以再dao中写啊。

public Set getMessageByUserIdAndTime(UserInfo user,String date){

 session.createQuery("From Message m 
                      where m.user.id= :id and   n.data<=:date").setString("id".user.getId()).setString("date",date).list();

}
上面的时间你要处理一下,

我有2中方法不知道行不行 你先试下第一种
Query q=session.createQuery("select u.message from UserInfo u and Message m where m.date=?").setDate(0,"放的是你得到的时间");
List list = q.list();
第2种
就是你查询的只查询对象 在通过对象查到里面的值
Query q1 = session.createQuery("select u,m from UserInfo u and Message m where m.date=?").setDate(0,"放的是你得到的时间");
List list=q1.list();
Object[] obj=(Object[]) list.get(0);//得到的第一条记录
UserInfo userinfo = (UserInfo) obj[1];//得到记录中的对象userinfo
Message message = (Message) obj[1];//得到记录中的对象message
这里我不知道你用的是什么 如果是有form就new一个form 在这里你的form中要把pojo对象作为form中的属性(这里我都不说了)
继续DAO中的方法new一个form
SearchForm searchForm=new SearchForm();
System.out.println(asearchForm.getu().getDate());//这样就可以得到值了
session.close();
return 你方法的定义的类型;
如果还是不行 我建议你把的你工程发给我 我帮你看看 ,可能我技术不行看不出来 你所给的信息我觉得还是少了点 呵呵~!

兄弟,我也有这问题!!虽然类型不同 但性质一样!User表 photos表 通过User表查到photos里的某一张照片!

呵呵,昨晚看了一下hibernate3.0,他提供了过滤器。刚好就是解决了你的问题。
之前我也不知道,

[url]http://bbs.51cto.com/thread-419294-1.html[/url]