如何用jpql获取数据库时间?

7z5jn7bk  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(281)

对于本机sql,我使用如下语句获取数据库时间:

SELECT CURRENT_TIMESTAMP

使用jpql,我得到了相同的结果:

SELECT CURRENT_TIMESTAMP
FROM Customer c
WHERE c.id=1

有办法去掉最后两行吗?
谢谢,

insrf1ej

insrf1ej1#

根据jsr 220:EnterpriseJavaBeans 3.0规范:

4.6.16函数表达式

java持久性查询语言包括以下内置函数,可以在查询的where或having子句中使用。
如果函数表达式的任何参数的值为null或未知,则函数表达式的值未知。
[...]
4.6.16.3日期时间函数

functions_returning_datetime:=
             CURRENT_DATE |
             CURRENT_TIME |
             CURRENT_TIMESTAMP

datetime函数返回数据库服务器上当前日期、时间和时间戳的值。
所以我已经很惊讶你可以写第二种形式,这是不正确的规范,因此可能无法移植。
对我来说,这样做的“正确”方法是创建一个类型为date字段的类 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();
}

相关问题