我在DB2 v9上使用Hibernate 4和JPA 2的CriteriaBuilder来构建一个可以按日期过滤的查询。谓词的相关部分是......
criteriaBuilder.greaterThan(myRoot.get(MyEntity_.myDate), aDateValue)
我的映射非常简单......
@Column(name="MY_DATE")
@Temporal(value = TemporalType.DATE)
public Date getMyDate() {
return myDate;
}
表格中的列类型为DATE
。运行具有此限制的查询时出现的错误是......
org.hibernate.exception.DataException:DB2 SQL错误:SQLCODE = -181,SQLSTATE = 22007
如果我使用生成的SQL并在独立的SQL编辑器中运行它,它会运行罚款。我试过没有运气就换到TemporalType.TIMESTAMP
。我已经仔细检查过绑定输入在运行时是否有效。
答案 0 :(得分:2)
事实证明,如果aDateValue
类型为java.sql.Date
而不是java.util.Date
,则错误就会消失。
答案 1 :(得分:0)
另一个对我有用的选择是添加
@Type(type = "date")
到实体中的java.util.Date字段。似乎Hibernate将类型java.util.Date映射到Sql时间戳,而当添加Type注释时,它将被加载为Date