For example, I have the Service
entity:
@OneToMany(fetch = FetchType.EAGER, mappedBy = \"service\")
pu
I solved the problem using @Filter:
@FilterDef(name = "dateFilter", parameters = {
@ParamDef(name = "date1", type = "date"),
@ParamDef(name = "date2", type = "date") })
@Filter(name = "dateFilter", condition = "date >= :date1 and date <= :date2")
and applying it to session:
session.enableFilter("dateFilter")
.setParameter("date1", date1)
.setParameter("date2", date2);
BTW, when working with Hibernate, what should I use for queries: it's own mechanism or "raw" SQL like "inner join" in this case?
You can use Restrictions.le("date2",date2) and Restrictions.gt("date1",date1) while querying. see this link.
http://www.mkyong.com/hibernate/hibernate-criteria-examples/
following is also very useful
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html
You can use HQL to create query for this case.
http://www.mkyong.com/hibernate/hibernate-query-examples-hql/
Criteria criteria = session.createCriteria(Service.class);
if(date1!=null){
criteria.add(Expression.ge("serviceStatuses.date1",date1));
}
if(date2!=null){
criteria.add(Expression.le("serviceStatuses.date2",date2));
}
return criteria.list();
got it?
You can make use of @Where clause:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "service")
@Where(clause = "is_deleted = 'N'")
List<ServiceStatus> serviceStatuses = new ArrayList<ServiceStatus>();
The above implementation allows you to filter records which are is_deleted = N
. Similarly you can write your own implementation.