【问题标题】:Criteria API Date field filter based on a single column基于单列的 Criteria API 日期字段过滤器
【发布时间】:2019-01-24 02:22:03
【问题描述】:

我的项目中有一个要求,需要将日期过滤器应用于管道分隔的字段。

如何使用最佳 Criteria API 来实现相同目标?

Table: Flyout

-------------------------------------------------------------
Name                   Date_flyout
-------------------------------------------------------------
John                   |08-06-2017|09-07-2017|02-10-2018|
Adam                   |06-06-2017|10-07-2017|03-06-2018|
Mary                   |07-08-2017|10-06-2017|06-06-2018|
-------------------------------------------------------------

Filter 
From-Flyout-Date: 06-01-2017
To-Flyout-Date  : 07-10-2017

Excepted ResultSet

-------------------------------------------------------------
Name                   Date_flyout
--------------------------------------------------------------
Adam                   |**06-06-2017**|10-07-2017|03-06-2018|
Mary                   |**07-08-2017**|10-06-2017|06-06-2018|
--------------------------------------------------------------


For obvious reason, the below criteria api wont work. However, how best we can modify the below to get excepted results??

criteria.add(Restrictions.ge("Date_flyout", "06-01-2017"))
criteria.add(Restrictions.le("Date_flyout", "07-10-2017"))

【问题讨论】:

  • 为什么Date_flyout有3个值?
  • 有一个Restictions.between(),但ge() AND le() 也应该可以工作...
  • 你的日期格式是什么??是“mm-dd-yyyy”吗??

标签: hibernate hibernate-criteria


【解决方案1】:

我认为使用.sqlRestriction 可以解决您的问题。查看以下代码:

    Session session = ... ;

    Criteria c = session.createCriteria(Flyout.class);
    c.add(Restrictions.sqlRestriction("substring_index(substring(Date_flyout,2),',',1) between ? and ?",
            new Object[]{"06-01-2017", "07-10-2017"},
            new Type[]{StandardBasicTypes.STRING, StandardBasicTypes.STRING}));
    List<Flyout> tList = c.list();

    for (Flyout f : tList) {

        System.out.println(f.getName() + " - " + f.yourTableProperyDateHere());
    }

    session.close(); 

substring(Date_flyout,2) - 忽略字符串中的起始管道 substring_index(substring(Date_flyout,2),',',1) - 忽略起始管道后从第一个管道中拆分文本

【讨论】:

  • 谢谢!我会试试的
猜你喜欢
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2016-09-17
  • 2010-12-15
  • 2017-09-18
  • 2018-01-07
  • 2021-11-24
相关资源
最近更新 更多