我需要使用 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/