首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JPQL或HQL查询中使用MySQL CONVERT_TZ函数

问如何在JPQL或HQL查询中使用MySQL CONVERT_TZ函数
EN

Stack Overflow用户
提问于 2015-07-30 13:59:26
回答 1查看 1.3K关注 0票数 4

我目前在一个MySQL数据库中有一个表,它有一个startDate和endDate,两者都是timestamps。这是使用hibernate链接到代码的。

我可以使用以下HQL返回这些

代码语言:javascript
复制
SELECT startDate, endDate FROM Reservation where id = :id

我要做的是根据给定的时区返回这些日期。我知道MySQL有一个函数CONVERT_TZ,它可以根据给定的时区返回日期,我想知道HQL是否有类似的函数?

我知道HQL有一个TIMESTAMP_WITH_ZONE函数,但是当我需要指定时区时,它使用的是本地时区,可以这样做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-31 08:06:52

自Hibernate ORM 5.2.18以来

从5.2.18开始,您可以通过MetadataBuilderContributor注册SQL函数

代码语言:javascript
复制
public class SqlFunctionsMetadataBuilderContributor 
        implements MetadataBuilderContributor {
         
    @Override
    public void contribute(MetadataBuilder metadataBuilder) {
        metadataBuilder.applySqlFunction(
            "convert_tz", 
            new StandardSQLFunction( "convert_tz", StandardBasicTypes.TIMESTAMP )
        );
    }
}

Ans只是通过MetadataBuilderContributor配置属性提供hibernate.metadata_builder_contributor:

代码语言:javascript
复制
<property>
    name="hibernate.metadata_builder_contributor" 
    value="com.vladmihalcea.book.hpjp.hibernate.query.function.SqlFunctionsMetadataBuilderContributor"
</property>

冬眠之前的ORM 5.2.18

或者,如果您使用Hibernate本机机制引导,您可以在构造MetadataBuilder时注册函数,如Hibernate用户指南中所解释的那样。

注册SQL函数的一种非常常见但又很幼稚的方法是覆盖MySQL方言并注册新函数,如下所示:

代码语言:javascript
复制
class CustomMySQLDialect extends MySQL5InnoDBDialect {
    public CustomMySQLDialect() {
        super();
        registerFunction( "convert_tz", new StandardSQLFunction( "convert_tz", StandardBasicTypes.TIMESTAMP ) );
    }

}

配置Hibernate以使用新方言:

代码语言:javascript
复制
<property>
    name="hibernate.metadata_builder_contributor" 
    value="com.vladmihalcea.book.hpjp.hibernate.CustomMySQLDialect"
</property>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31725820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档