【发布时间】:2016-11-02 17:37:27
【问题描述】:
我的 jpql “where 子句” 使用时间戳列进行选择没有按预期“过滤”。
它似乎对时间戳的“日期”部分很敏感,但忽略了“时间”部分。
table1.tmstmp 列定义为:“TMSTMP TIMESTAMP NOT NULL”
table1 实体包含以下命名查询...
@NamedQuery(name = "table1.getUpdTime", query = "SELECT e FROM table1 e
WHERE e.tmstmp >= :tmstmp order by e.tmstmp asc")
tmstmp 属性是这样定义的...
@Column(name = "TMSTMP", nullable = false)
private Timestamp tmstmp;
就是这样用的……
TypedQuery<EsEvnt> query = em.createNamedQuery("table1.getUpdTime",
table1.class).setParameter("tmstmp", tmstmp);
例如,当上面的 Timestamp 变量(“tmstmp”)等于“2016-06-30T09:28:33.247-04:00”时,它返回日期部分为:2016-06 的所有记录-30。
有什么想法吗?
我想依靠“where 子句”来明确选择使用整个时间戳。
谢谢!
更新
我使用“CAST”函数修改了我的查询(似乎需要原生查询),如下所示,它似乎始终如一地工作......
//...note, date is in ISO format...
LocalDateTime ldt = LocalDateTime.parse(tmstmpString, DateTimeFormatter.ISO_DATE_TIME);
Timestamp tmstmp = Timestamp.valueOf(ldt);
-
-
-
// (see "native query", coded below)...
Query query = em.createNativeQuery("SELECT * FROM table1 e WHERE e.tmstmp >= CAST(?1 as TIMESTAMP)", Table1.class)
.setParameter(1, tmstmp);
List<Table1> resultList = query.getResultList();
谢谢! :)
WebLogic 12.1.3
DB2
Java 8
EclipseLink 2.1
【问题讨论】:
-
而
tmstmp字段确实是Timestamp?正如java.sql.Date将小时、分钟和秒设置为 0。 -
是的,“tmstmp”是类型:时间戳。谢谢提问!
标签: java db2 eclipselink jpql weblogic12c