如何获得数据库的时间与JPQL?
题
与本地SQL我得到数据库的时间与像一个语句:
SELECT CURRENT_TIMESTAMP
与JPQL我得到相同的结果:
SELECT CURRENT_TIMESTAMP
FROM Customer c
WHERE c.id=1
有没有摆脱最后两行的方式?
感谢,
解决方案
按照 JSR 220:企业JavaBeans 3.0 规格:
4.6.16函数表达式
Java持久查询语言 包括以下内置 功能,的其可以在使用 WHERE或HAVING查询的子句强>
如果任何参数的值设定为一个 功能性表达为空或 未知的,功能性的值 表达是未知的。
[...]
<强> 4.6.16.3日期时间函数强>
functions_returning_datetime:= CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP
日期时间函数返回 价值当前的日期,时间和 时间戳在数据库服务器上。
所以,我已经感到惊讶,你可以写第二个形式,是不是每个规格正确,因而有可能无法移植。
在我看来,“正确”的方式做,这将创建类型java.util.Date
的日期字段类和一个原生查询来填充它。类似的东西:
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class DateItem {
private Date date;
/**
* @return the date
*/
@Id
@Column(name = "DATE_VALUE")
@Temporal(TemporalType.TIMESTAMP)
public Date getDate() {
return date;
}
/**
* @param date
* the date to set
*/
public void setDate(Date date) {
this.date = date;
}
}
然后:
@PersistenceContext
EntityManager em;
/**
* @return System date on DB server
*/
public Date getSystemDate() {
Query query = em.createNativeQuery(
"SELECT CURRENT_TIMESTAMP", DateItem.class);
DateItem dateItem = (DateItem) query.getSingleResult();
return dateItem.getDate();
}
不隶属于 StackOverflow