如何使用Hibernate条件查询一个月的日期

Luc*_*oli 4 hibernate criteria

我需要使用条件来查询数据库.我正在搜索的数据有一个日期,比如'startDate',我有一个月假一月0,我需要提取所有数据,其中startDate有月= 0; 在sql中我会使用类似'where month(startDate)= 0'的内容,但我不知道如何使用hibernate标准执行此操作,如果可能的话.你能帮助我吗?感谢你们.卢卡.

JB *_*zet 7

有了标准,我认为你必须编写自己的表达式类.这样的东西应该工作(虽然没有经过测试):

public class MonthEqExpression implements Criterion {

    private final String propertyName;
    private final int month;

    public MonthEqExpression(String propertyName, int month) {
        this.propertyName = propertyName;
        this.month = month;
    }

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

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

    @Override
    public String toString() {
        return "month(" + propertyName + ") = " + month;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在条件中使用此表达式:

criteria.add(new MonthEqExpression("startDate", 0));
Run Code Online (Sandbox Code Playgroud)

  • @Luca Paoli:Hibernate是开源的.我只是查看了hibernate代码中现有表达式的代码. (2认同)