java - 仅比较日期数据类型的 'Minute' 部分的 Hibernate Criteria

标签 java hibernate

我编写了一个 Hibernate 标准来过滤和显示具有特定时间输入的记录。

为此,我的数据库有一条日期时间部分为 12:30 的记录。我已经写了一个 Hour('HH') 版本,我输入 (int 12) 一小时并且它有效。

对分钟使用条件 (int 30) 不会返回数据库中的记录。事实上,无论我输入什么,它都不会返回。我下面写的标准有问题吗?

public class MinEqCriteria implements Criterion {

private final String propertyName;
private final int min;

public MinEqCriteria(String propertyName, int min) {
    this.propertyName = propertyName;
    this.min = min;

}

@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)
    throws HibernateException {
        String[] columns = criteriaQuery.findColumns(propertyName, criteria);
        if (columns.length!=1) {
            throw new HibernateException("minEq may only be used with single-column properties");
        }

        String str = "TO_CHAR(" + columns[0] + ",'mm') = ?";

        return str;
    }

@Override
public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    return new TypedValue[] {new TypedValue(IntegerType.INSTANCE, min, EntityMode.POJO)};
}

@Override
public String toString() {
    return "min(" + propertyName + ") = " + min;
}

}

最佳答案

我已经找到答案了。显然在我的sqldeveloper中,表明该数据字段的格式是“HH:MI”。因此,在 Critera 代码中,我应该使用以下代码:

String str = "TO_CHAR("+ columns[0] + ",'MI') = ?";

关于java - 仅比较日期数据类型的 'Minute' 部分的 Hibernate Criteria,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18585373/

相关文章:

java - spring 4 mvc + Hibernate + Annotations 配置堆内存问题

java - JPA级联不插入外键

java - DatagramSocket 随机停止接收 DatagramPackets

java - 在 java 中制作 InputStream 副本的最佳方法是什么

java - 如何模拟未作为参数传递的对象

带有 sendAsyncMulti/multiResponseAsync 的 Java 9 HttpClient

java - Spring Data Jpa EntityManager 刷新不起作用

java - 如何使用 Spring Data REST 的多态关联

用于多数据库 Grails 应用程序的 Spring 或 Hibernate Multi-Tenancy

c# - Java枚举支持方法?但不是在 C# 中?