Max*_*Max 11 java orm hibernate jpa jpql
使用本机SQL我使用如下语句获取数据库时间:
SELECT CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
使用JPQL我得到相同的结果:
SELECT CURRENT_TIMESTAMP
FROM Customer c
WHERE c.id=1
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱最后两行?
谢谢,
Pas*_*ent 16
根据JSR 220:Enterprise JavaBeans 3.0规范:
4.6.16功能表达
Java Persistence查询语言包括以下内置函数,这些函数可以在查询的WHERE或HAVING子句中使用.
如果函数表达式的任何参数的值为null或未知,则函数表达式的值是未知的.
[...]
4.6.16.3日期时间函数
Run Code Online (Sandbox Code Playgroud)functions_returning_datetime:= CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMPdatetime函数返回数据库服务器上当前日期,时间和时间戳的值.
所以我很惊讶你可以编写第二种形式,这种形式根据规范不正确,因此可能无法移植.
对我而言,执行此操作的"正确"方法是创建一个类型为日期字段的类,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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
@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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20622 次 |
| 最近记录: |