1

我在 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,但没有运气。我已经仔细检查了绑定输入在运行时是否有效。

4

2 回答 2

2

事实证明,如果aDateValue是类型java.sql.Date而不是java.util.Date错误消失了。

于 2012-12-08T00:47:12.747 回答
0

另一个对我有用的选择是添加

@Type(type = "date")

到实体中的 java.util.Date 字段。似乎 Hibernate 使用 Sql Timestamp 映射类型 java.util.Date 而当添加 Type 注释时,它被映射为 Date

于 2014-05-09T18:31:55.400 回答