HQL 日期差异(以分钟为单位)

HQL Date difference in minutes

我有一个实体 class Foo

@Entity
public class Foo {
   @Basic
   @Column("Date_From)
   Date dateFrom;
   //...
}

我需要计算 date_From 和当前日期之间的差异,然后得到其中的 mod 个。

在sql中会是

DATEDIFF(MINUTE, ct.dateFrom, :date) % 120

但是HQL不支持DATEDIFF功能,我试过把它添加到dialect

registerFunction("DATEDIFF_MINUTE", new SQLFunctionTemplate(new CalendarDateType(), "DATEDIFF(minute, ?1,?2)"));

并使用它 MOD(DATEDIFF_MINUTE(ct.dateFrom, :date), 120),但出现异常

No data type for node: org.hibernate.hql.ast.tree.MethodNode 
 +-[METHOD_CALL] MethodNode: '('
 |  +-[METHOD_NAME] IdentNode: 'DATEDIFF_MINUTE' {originalText=DATEDIFF_MINUTE}
 |  \-[EXPR_LIST] SqlNode: 'exprList'
 |     +-[DOT] DotNode: 'Foota0_.Date_From' {propertyName=dateFrom,dereferenceType=ALL,propertyPath=dateFrom,path=ct.dateFrom,tableAlias=Foota0_,className=ru.package.Foo,classAlias=ct}
 |     |  +-[ALIAS_REF] IdentNode: '(Foota0_.Date_Create, Foota0_.User_Create)' {alias=ct, className=ru.package.Foo, tableAlias=Foota0_}
 |     |  \-[IDENT] IdentNode: 'dateFrom' {originalText=dateFrom}
 |     \-[NAMED_PARAM] ParameterNode: '?' {name=date, expectedType=null}

我该如何解决这个问题?

问题已解决。似乎 Hibernate 不接受 camelCaseCAPSED_TEXT。将函数重命名为 datediff_min 有效。