Luc*_*oli 4 hibernate criteria
我需要使用条件来查询数据库.我正在搜索的数据有一个日期,比如'startDate',我有一个月假一月0,我需要提取所有数据,其中startDate有月= 0; 在sql中我会使用类似'where month(startDate)= 0'的内容,但我不知道如何使用hibernate标准执行此操作,如果可能的话.你能帮助我吗?感谢你们.卢卡.
有了标准,我认为你必须编写自己的表达式类.这样的东西应该工作(虽然没有经过测试):
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)
| 归档时间: |
|
| 查看次数: |
6394 次 |
| 最近记录: |