在hibernate / Spring中的oneToMany映射表上添加过滤器

时间:2013-07-30 09:01:34

标签: spring hibernate hibernate-mapping

我在当前项目中使用hibernate4和spring3.1。

我有两个表,一对多映射。我正在使用基于注释的映射。 映射是这样完成的:

public class TableA {
       @Id
       private Long  id;

       @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
       @JoinColumn(name = "sample_id")
       private Set<TableB> tableBList;

       // setter getter
   }


   public class TableB{   
       @Id
       private Long                  id;

       private Long                  sample_id;

       private Date added_date;
   }

当我解雇这样的查询时:

String hql = "FROM TableA WHERE id = 5";
return sessionFactory.getCurrentSession().createQuery(hql).list();

它将返回TableB中为id = 5映射的所有行。 但我想再添加一个条件,如added_date = XXXX

是否可以在查询中添加过滤器或在列added_date上添加任何其他方式?

1 个答案:

答案 0 :(得分:1)

是的,可以从查询中获取:

查看hql文档:http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#queryhql

你想要像

这样的东西
String hql = "select a from TableA as a inner join a.tableBList as b WHERE a.id = :id and b.added_date > :after";
Query q = sessionFactory.getCurrentSession().createQuery(hql);
q.setParameter("id", 5);
q.setParameter("after", date);
q.list();