在Hibernate Criteria中将date转换为字符串
是否可以执行检查Date实例的字符串表示forms的请求。 例如
Restrictions.like("dateField", "%12%")
检索日期中包含12个字符串或12个月或12个年份的日期,其中“dateField”是java.util.Date的实例谢谢
我有同样的问题,这就是我做的:
首先,我创建了自己的Criterion实现:
public class DateLikeExpression implements Criterion { private static final long serialVersionUID = 1L; private String propertyName; private String value; public DateLikeExpression(String propertyName, String value) { this.propertyName = propertyName; this.value = value; } public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName); if (columns.length != 1) { throw new HibernateException("Like may only be used with single-column properties"); } return "to_char(" + columns[0] + ", 'DD/MM/YYYY HH24:MI') like ?"; } public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { return new TypedValue[] { new TypedValue(new org.hibernate.type.StringType(), MatchMode.START.toMatchString(value.toLowerCase()), EntityMode.POJO) }; } }
然后,当我将Criteria放在一起时,我只是使用它:
criteria.add(new DateLikeExpression("dateColumnName", "26/11%"));
这就是它。 请注意,此实现依赖于区域设置(在本例中为pt_BR),适用于具有to_char函数的postgresql。 您可能需要稍微调整一下才能使用数据库引擎。
像这样的东西
Restrictions.sqlRestriction("month(dateField) = 12"); Restrictions.sqlRestriction("right(year(dateField),2) = 12");
sqlRestriction中的部分取决于您使用的数据库。
- 使用http://www.hibernate.org/dtd 的Hibernate问题
- 更改存储在基于散列的集合中的对象的hashCode
- Hibernate用户和朋友JsonReference
- 调用一个mysql函数在hibernate中返回varchar
- Spring3 / Hibernate3 / TestNG:一些测试给出了LazyInitializationException,有些则没有
- Criteria Builder在Select语句中创建新对象
- MVC与延迟加载
- 无法从无处构建Hibernate SessionFactoryexception
- 如何在Spring Applications中处理生产数据库的模式升级