我正在使用休眠通用 dao 项目。我需要搜索“date1”字段早于“date2”的所有记录,例如:
search.addFilterLessThan('date1', 'date2');
然而,从 API 看来,搜索只接受值作为第二个参数而不是属性:
Date date = ...;
search.addFilterLessThan('date1', date);
有没有办法根据两个记录字段进行过滤?
我正在使用休眠通用 dao 项目。我需要搜索“date1”字段早于“date2”的所有记录,例如:
search.addFilterLessThan('date1', 'date2');
然而,从 API 看来,搜索只接受值作为第二个参数而不是属性:
Date date = ...;
search.addFilterLessThan('date1', date);
有没有办法根据两个记录字段进行过滤?
我假设您使用的是 Hibernate 标准 API。如果你是,比较属性很容易:
Criteria criteria = session.createCriteria(SomeObject.class);
criteria.add(Property.forName("date1").ltProperty("date2"));
criteria.list();
您还可以跨连接和 SQL 支持的各种其他方案进行比较。这种事情也可以通过 HQL 获得。
查看 Hibernate Generic DAO Project 后更新:
看起来 Hibernate Generic DAO 项目在休眠功能方面束缚了您的双手,限制了可能的查询种类(不公开 Criteria 或 HQL 查询!)。我不认为这是增值,即使声称它“简化”了您的查询或使它们更“健壮”。
从项目组得到答案,它是使用自定义过滤器完成的:
search.addFilterCustom("{date1} < {date2}");