문제

기본 SQL을 사용하면 다음과 같은 명령문으로 데이터베이스 시간을 얻습니다.

SELECT CURRENT_TIMESTAMP

JPQL을 사용하면 다음과 동일한 결과를 얻습니다.

SELECT CURRENT_TIMESTAMP
FROM Customer c
WHERE c.id=1

마지막 두 줄을 제거하는 방법이 있습니까?

감사해요,

도움이 되었습니까?

해결책

에 따르면 JSR 220 : Enterprise Javabeans 3.0 명세서:

4.6.16 기능 표현

Java Persistence Query 언어에는 다음과 같은 내장 기능이 포함되어 있습니다. 쿼리의 Where 또는 Wading에 사용될 수 있습니다..

기능적 표현에 대한 인수의 값이 널 또는 알려지지 않은 경우, 기능적 표현의 값은 알려져 있지 않습니다.

[...]

4.6.16.3 DateTime 함수

functions_returning_datetime:=
             CURRENT_DATE |
             CURRENT_TIME |
             CURRENT_TIMESTAMP

DateTime 함수는 데이터베이스 서버에서 현재 날짜, 시간 및 타임 스탬프의 값을 반환합니다.

그래서 나는 당신이 사양에 따라 올바른 두 번째 양식을 쓸 수 있다는 사실에 이미 놀랍습니다. 따라서 휴대용이 아닐 수도 있습니다.

나 에게이 작업을 수행하는 "올바른"방법은 날짜 필드가있는 클래스를 만드는 것입니다. 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