我想知道是否有办法使用@Where(clause="")
来绑定is_active=1 AND expires_date <= new Date()
@OneToMany
关系中的一组事物。
像这样的东西
@Where(clause="is_active=1 AND expires_date <=" + new Date())
或者你只能用常数做到吗?
此代码不仅可用于寻找解决方法,还是有办法执行此操作。 谢谢。
答案 0 :(得分:3)
@Where.clause
只能是一个常数,而尝试做的事情是不可能的
您可以通过查询/命名查询使用业务方法检索数据,也可以使用filter检索数据,因为过滤器可以手动激活并具有参数。
如果您需要获取报告的未到期数据,那么业务方法是正确的方法;如果你想在工作会话期间只以过时的方式看到未过期的数据,过滤器就是正确的解决方案。
答案 1 :(得分:1)
您可以通过在休眠中使用条件来完成此操作。在实现上述代码之前,请确保您已打开活动会话。
Calendar rightNow = Calendar.getInstance();
Criteria criteria = session.createCriteria(yourclassname.class);
criteria.add(Restrictions.eq("is_active", 1));
criteria.add(Restrictions.le("expires_date", rightNow));
答案 2 :(得分:0)
聚会晚了一点,但是您可以在PostgreSQL中使用current_date之类的sql函数来做到这一点:
@Where(clause="is_active=1 AND expires_date <= current_date")