在DB2 for Dates上导致错误181的Hibernate查询

时间:2012-12-07 22:44:28

标签: hibernate jpa db2

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

@Type(type = "date")

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