HQL的current_timestamp()如何工作?

时间:2013-10-08 17:14:21

标签: hql

hql函数current_timestamp()是否使用运行java代码的服务器或运行数据库的服务器的时间?

2 个答案:

答案 0 :(得分:4)

HQL查询转换为SQL查询,SQL查询由数据库执行。因此,current_timestamp()等效的SQL函数将在您的数据库服务器上执行。

答案 1 :(得分:0)

在休眠状态下,每个数据库都有Dialect个类。这些是该特定数据库的适配器。在这些类中定义了类似current_timestamp的函数。例如,MySQL 5.7方言是:

public class MySQL57Dialect extends MySQL55Dialect {
    public MySQL57Dialect() {
        super();

        registerColumnType( Types.TIMESTAMP, "datetime(6)" );
        registerColumnType( Types.JAVA_OBJECT, "json" );
        final SQLFunction currentTimestampFunction = new StaticPrecisionFspTimestampFunction("now", 6 );

        registerFunction( "now", currentTimestampFunction );
        registerFunction( "current_timestamp", currentTimestampFunction );
        registerFunction( "localtime", currentTimestampFunction );
        registerFunction( "localtimestamp", currentTimestampFunction );
        registerFunction( "sysdate", new StaticPrecisionFspTimestampFunction( "sysdate", 6 ) );

    }

    public boolean supportsRowValueConstructorSyntaxInInList() {
        return true;
    }
}

您可以看到那里有功能注册。 Full Code在GitHub页面中处于休眠状态。