【问题标题】:Hibernate generic DAO searchHibernate 通用 DAO 搜索
【发布时间】:2012-03-15 04:29:14
【问题描述】:

我正在使用hibernate generic dao project。我需要搜索“date1”字段早于“date2”的所有记录,例如:

search.addFilterLessThan('date1', 'date2');

但是从 API 看来,搜索只接受值作为第二个参数,而不接受属性:

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

有没有办法根据两个记录字段进行过滤?

【问题讨论】:

    标签: hibernate search hibernate-generic-dao


    【解决方案1】:

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

    Criteria criteria = session.createCriteria(SomeObject.class);
    criteria.add(Property.forName("date1").ltProperty("date2"));
    criteria.list();
    

    您还可以跨连接和 SQL 支持的各种其他场景进行比较。这种事情也可以通过 HQL 获得。

    审核 Hibernate Generic DAO 项目后更新:

    看起来 Hibernate Generic DAO 项目在休眠功能方面束缚了您的双手,限制了可能的查询种类(不公开 Criteria 或 HQL 查询!)。我不认为这是增值,即使声称它“简化”了您的查询或使它们更“强大”。

    【讨论】:

    • 我正在使用 hibernate-generic-dao 的 Search 和 Filter 类,为了与项目的其余部分保持一致,我更愿意使用它们。如果我无法通过这些课程达到我所需要的,我将使用标准
    • 哇,这个框架真的束缚了你的手,而且不是很好。看起来不可能使用包装“hibernate-generic-dao”项目及其搜索或过滤器类来进行这种类型的搜索。我会把它撕掉,要么编写你自己的 DAO,要么为你自己的项目创建一个更好、更灵活/限制更少的“通用 dao”。
    • 此外,原始开发人员不再支持该特定项目。
    • 在我的工作中,我们创建了一个类似的“通用 DAO”实现,但我们确保允许任何调用代码访问休眠会话,允许开发人员创建任何可以想象的查询,包括 HQL 和标准查询.
    • 不再支持查看该项目我想当有更多可用时间时我们也必须这样做。也许扩展框架以允许标准搜索将在短期内起作用
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 2018-01-10
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      相关资源
      最近更新 更多