我在当前项目中使用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上添加任何其他方式?
答案 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();