我有一列注定要保存一个时间戳,该时间戳使用 java.util.Date 数据类型定义并存储在数据库中的 Oracle DATE 类型中。我已经验证了完整的日期和时间信息是否已保存并从数据库中正确检索,但是当我尝试在 NamedQuery 中对其进行比较时,时间信息似乎没有在比较中考虑在内。
该列定义如下(analyzeDate 的类型为 java.util.Date):
@Basic(optional = false)
@Column(name = "ANALYZE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date analyzeDate;
还有我的命名查询:
@NamedQuery(name = "BOADocument.findByBeforeAnalyzeDate",
query = "SELECT b FROM BOADocument b WHERE b.companyId = :companyId AND b.analyzeDate < :analyzeDate")
然后我执行它,传递 java.util.Date 类型的analyzeDate:
List<BOADocument> docs = em.createNamedQuery("BOADocument.findByBeforeAnalyzeDate")
.setParameter("companyId", clientRecord)
.setParameter("analyzeDate", analyzeDate, TemporalType.TIMESTAMP)
.getResultList()
我得到了 Document 表中所有行的列表,尽管它们的 analyzeDate 值与我设置为 NamedQuery 的参数的值完全相同。
如果我反转比较,我没有得到任何线条,进一步说服我时间戳的时间部分在 b.analyzeDate 方面丢失,而不是 :analyzeDate 方面。
我将 JPA 1.0 与 Hibernate 3.5 一起使用。
这让我很难过,我几乎要放弃并使用本机查询,但这感觉就像在作弊!