【问题标题】:Date difference in days Restriction Hibernate日期差异天数限制休眠
【发布时间】:2015-11-26 09:24:01
【问题描述】:

我正在使用 Hibernate 和 Criteria API 来编写我的数据库查询。我需要做的是我需要两个日期的天数差异,并将该天数与特定数字进行比较。

例如常用的标准限制为:

criteria.add(Restrictions.eq("somProperty", someValue));

我需要的是:

criteria.add(Restrictions.ge("dateProperty1 - dateProperty2", 15));

表示两个日期之间的日期差大于或等于 15 天。

我不知道如何实现这一点。是的,我在 Google 上做了很多查找可能的解决方案,但没有得到我需要的适当材料。

【问题讨论】:

    标签: java sql database hibernate jakarta-ee


    【解决方案1】:

    如果您查看Restrictions 类的文档,您会看到:

    • 大多数函数都在“属性与值”对上运行(就像在您的第一个示例中一样)
    • 其余比较器函数对“属性与其他属性”对进行操作

    但是没有针对您的情况的自定义函数。那么您有什么选择是使用sqlRestriction,它可以用来以您的 DBMS 的本机形式表达这种情况。那将是一个不同但更容易的问题,虽然显然不如你最初的想法那么优雅。

    【讨论】:

    • 嗨,感谢重播。我正在检查 sqlRestriction(),因为我们需要提供表的别名,但我是如何知道 Hibernate 为我打算查询的表提供的别名。 .
    • 呃,那个 javadoc 真是令人困惑。但是不,您不必知道别名。它的意思是,您可以像这样引用您的表:{alias}.dateProperty,Hibernate 会为您替换真正的别名。
    • 是的,我明白你的意思,但是当我们写 {alias}.property 时,休眠将替换我们创建标准的表的别名。例如..session.createCriteria(MyPojo.class);所以 {alias} 用 MyPojo 的别名代替。
    • 你想要什么来代替这种行为?
    • 但在我的情况下,我正在使用标准编写连接查询,并且在该连接中,我需要为创建标准的原始表之外的不同表编写查询。例如。 session.createCriteria(MyPojo.class,"myPojo"); criteria.createAlias("myPojo.anatherPojo", "anatherPojo");对于这个 anatherPojo,我需要编写 sqlRestriction
    猜你喜欢
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 2013-02-16
    • 2015-03-23
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多