Oracle Hibernate限制API到_char()函数

Oracle Hibernate限制API到_char()函数,oracle,hibernate,Oracle,Hibernate,大家好,我有这样一个SQL查询: SELECT * FROM PEOPLE P WHERE to_char(P.BIRTH_DATE,'DD/MM/YYYY') = '01/06/2012' 我想通过Hibernate限制API运行此查询。我认为以下几点做不了同样的工作: Restrictions.eq(People.PROP_BIRTH_DATE, Calendar.getInstance()) 如何创建这样的限制 java.sql.Date date = java.sql.Date.va

大家好,我有这样一个SQL查询:

SELECT * FROM PEOPLE P WHERE to_char(P.BIRTH_DATE,'DD/MM/YYYY') = '01/06/2012'
我想通过Hibernate限制API运行此查询。我认为以下几点做不了同样的工作:

Restrictions.eq(People.PROP_BIRTH_DATE, Calendar.getInstance())
如何创建这样的限制

java.sql.Date date = java.sql.Date.valueOf("2012-06-01");
criteria.add(Restrictions.eq(People.PROP_BIRTH_DATE, date));

上面假设出生日期存储为数据库中的日期,而不是时间戳。如果数据库中的出生日期是一个时间戳,因此有一个时间部分,则可移植的方法是:

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date begin = df.parse("01/06/2012");
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(date);
endCalendar.add(Calendar.DATE, 1);
criteria.add(Restrictions.ge(People.PROP_BIRTH_DATE, begin));
criteria.add(Restrictions.lt(People.PROP_BIRTH_DATE, endCalendar.getTime()));

这里的要点是消除PROP_BIRTH_DATE字段中的time字段,并将其与日期字符串进行比较。因此,我认为您的解决方案与给定的查询不等价。您应该提到,出生日期作为时间戳存储在数据库中,因为它并不明显。我将编辑我的答案。
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date begin = df.parse("01/06/2012");
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(date);
endCalendar.add(Calendar.DATE, 1);
criteria.add(Restrictions.ge(People.PROP_BIRTH_DATE, begin));
criteria.add(Restrictions.lt(People.PROP_BIRTH_DATE, endCalendar.getTime()));