如何在没有sqlRestriction的情况下优化以下内容:
public List<SomeEntity> getEntityByYearMonthAndDay(Calendar cal) {
Criteria criteria = helper.createCriteria();
criteria.add(sqlRestriction("(DATE(date_column) = ?)", cal.getTime(), org.hibernate.type.StandardBasicTypes.DATE));
return criteria.list();
}
某个实体看起来像:
@Entity
@Table(name="some_table")
public class SomeEntity extends Identifiable {
@Column(name = "date_column")
private Calendar dateColumn;
//Getters and setters
}
在数据库中,我有这样的表示:
日期列=>日期时间(YYYY-MM-DD HH:MM:ss)。
很明显,逻辑只比较日期截断时间值。
最佳答案
是的,伙计们:)
因此,如果不想使用内置的MySQL DATE(…)函数,而只使用JPA:
public List<SomeEntity> getEntityByYearMonthAndDay(Calendar cal) {
Criteria criteria = helper.createCriteria();
Calendar leftBorder = Calendar.getInstance();
leftBorder.setTime(cal.getTime());
Calendar rightBorder = Calendar.getInstance();
rightBorder.setTime(cal.getTime());
rightBorder.add(Calendar.DATE, 1);
Conjunction dateConjunction = Restrictions.conjunction();
dateConjunction.add(Restrictions.eq("dateColumn", leftBorder));
dateConjunction.add(Restrictions.lt("dateColumn", rightBorder));
criteria.add(dateConjunction);
return criteria.list();
}