与本地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();
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top