Hibernate通用DAO搜索

Hibernate通用DAO搜索,hibernate,search,hibernate-generic-dao,Hibernate,Search,Hibernate Generic Dao,我在用电话。我需要搜索“date1”字段早于“date2”的所有记录,例如: search.addFilterLessThan('date1', 'date2'); 但是,从API来看,搜索只接受值作为第二个参数,而不接受属性: Date date = ...; search.addFilterLessThan('date1', date); 有没有一种方法可以基于两个记录字段进行过滤?我假设您使用的是Hibernate criteria API。如果是,比较属性很容易: Criteria

我在用电话。我需要搜索“date1”字段早于“date2”的所有记录,例如:

search.addFilterLessThan('date1', 'date2');
但是,从API来看,搜索只接受值作为第二个参数,而不接受属性:

Date date = ...;
search.addFilterLessThan('date1', date);

有没有一种方法可以基于两个记录字段进行过滤?

我假设您使用的是Hibernate criteria API。如果是,比较属性很容易:

Criteria criteria = session.createCriteria(SomeObject.class);
criteria.add(Property.forName("date1").ltProperty("date2"));
criteria.list();
您还可以跨连接和SQL支持的各种其他场景进行比较。这种东西也可以通过HQL获得

查看Hibernate通用DAO项目后更新:


看起来Hibernate通用DAO项目在Hibernate特性方面束缚了您的手脚,限制了可能的查询种类(不公开条件或HQL查询!)。我不认为这是附加值,即使有人声称它“简化”了您的查询或使它们更“健壮”。

从项目组得到了答案,它是使用自定义过滤器完成的:

search.addFilterCustom("{date1} < {date2}"); 
search.addFilterCustom(“{date1}<{date2}”);

我正在使用hibernate generic dao的搜索和筛选类,我更愿意使用它们与项目的其余部分保持一致。如果我不能用这些类实现我所需要的,我将使用criteriaWow,这个框架真的束缚了你的手脚,而且不是以一种好的方式。看起来不可能使用带有搜索或筛选类的包装“hibernate generic dao”项目进行这种类型的搜索。我会把它撕下来,或者编写自己的dao,或者为自己的项目创建一个更好、更灵活/限制更少的“通用dao”,在我的工作中,我们创建了一个类似的“通用DAO”实现,但我们确保允许任何调用代码访问hibernate会话,允许开发人员创建任何可以想象的查询,包括HQL和Criteria查询。看到项目不再受支持,我想如果有更多的时间,我们也必须这样做。也许扩展框架以允许标准搜索在短期内会起作用