0

我在当前项目中使用 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 上添加过滤器?

4

1 回答 1

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();
于 2013-07-30T09:13:33.350 回答