java - 如何将 MySQL 的 DATE_ADD 与 JPA 条件一起使用?

标签 java mysql jpa

我需要使用 MySQL 和 JPA Criteria 为日期添加一个时间间隔(两列都在表中)。我知道需要以下功能:

MySQL 的DATE_ADD:

DATE_ADD(date,INTERVAL expr unit)

CriteriaBuilder 的函数:

function(String name, Class<T> type, Expression<?>... args)

我还有一个创建函数表达式的类:

public class SqlFunctionExpression extends BasicFunctionExpression<String> implements Serializable {

    public SqlFunctionExpression(CriteriaBuilderImpl criteriaBuilder,
                                 Class<String> javaType,
                                 String functionName) {
        super(criteriaBuilder, javaType, functionName);
    }

    @Override
    public String render(RenderingContext renderingContext) {
        return getFunctionName();
    }
}

可以像 new SqlFunctionExpression(null, String.class, "MINUTE") 那样使用来创建分钟单位。

但是,如何创建表达式 INTERVAL expr unit 其中 expr 是一个表列?

最佳答案

注册函数

    public class CommonMySQLDialect extends MySQL57Dialect {
        public CommonMySQLDialect() {
        super();
        registerFunction("date_add", new SQLFunctionTemplate(TimestampType.INSTANCE, "date_add(?1, INTERVAL ?2 ?3)"));
        }
    }

添加到 hibernate 配置

    <property name="hibernate.dialect">yourpackage.CommonMySQLDialect</property>

准备使用

    Expression<String> unit = new SqlFunctionExpression(null, String.class, "MINUTE");
    Expression<Integer> num = cb.literal(10);
    Expression<Date> newDate = cb.function("date_add", Date.class, cb.currentTimestamp(), num, unit);

关于java - 如何将 MySQL 的 DATE_ADD 与 JPA 条件一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63153649/

相关文章:

java - 使用对象作为参数从另一个 Controller 调用 Controller 并检索响应

php - 如何创建 MYSQL 查询以获得特定结果(计算一列中的所有唯一值)

c# - 从 C# Webforms 插入 MySQL 数据库,给出 ArgumentException

java - 为什么在命名 native 查询中使用 EXISTS 子句时 OpenJPA 会提示 "unexpected end of statement"?

java - 链接列表,未正确添加值

java - 给定一个类名,如何识别它是从 JBoss AS 5.1.0 中加载的?

Java Scanner 不接受字符串前的整数输入

mysql - 删除Cascade而不改变表结构

java - Bean Validation + Resource Bundle 的想法?

java - JPA双向@OneToOne与级联合并