您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

HQL中的日期运算

HQL中的日期运算

根据您的数据库,这可能非常简单。HQL支持内置的特定于供应商的特性和功能,如果HQL不支持功能,它还支持通过注册功能来扩展方言的功能

假设您使用的是sqlServer(或Sybase)。sqlServer具有一个名为“ DATEADD”的函数,可以很轻松地完成您喜欢的事情。格式为:

DATEADD (datepart, number, date)

您可以在HQL中直接使用此功能方法是先在自己的Hibernate方言中注册功能。为此,您只需要扩展当前使用的方言即可。这是一个非常简单的过程。

首先,创建您自己的方言类(用您自己的数据库供应商替换“ sqlServer2008Dialect”):

public class MysqLServerDialect extends sqlServer2008Dialect {

  public MysqLServerDialect() {
    registerFunction("addminutes", new VarArgssqlFunction(TimestampType.INSTANCE, "dateadd(minute,", ",", ")"));
  }

}

接下来,修改您的hibernate配置以使用此新类:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    ...
    <property name="hibernate.dialect">com.mycompany.MysqLServerDialect</property>
    ...
</hibernate-configuration>

现在只需使用函数

select x from MyEntity x where addminutes(x.creationDate, 10) < current_time()

(这假设您的实体称为MyEntity,并且creation_date字段映射到名为creationDate的属性)。

其他 2022/1/1 18:15:21 有613人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶