JPQL로 데이터베이스 시간을 얻는 방법은 무엇입니까?
문제
기본 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();
}
제휴하지 않습니다 StackOverflow