JPQLでデータベース時間を取得するにはどうすればよいですか?
質問
ネイティブ SQL では、次のようなステートメントでデータベース時間を取得します。
SELECT CURRENT_TIMESTAMP
JPQL を使用すると、次のようにしても同じ結果が得られます。
SELECT CURRENT_TIMESTAMP
FROM Customer c
WHERE c.id=1
最後の2行を削除する方法はありますか?
ありがとう、
解決
による JSR220:エンタープライズ JavaBeans 3.0 仕様:
4.6.16 関数式
Java Persistenceクエリ言語には、次の組み込み関数が含まれています。 クエリの場所または条項で使用される場合があります.
機能式への引数の値がヌルまたは不明である場合、機能式の値は不明です。
[...]
4.6.16.3 日時関数
functions_returning_datetime:= CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP
DateTime関数は、データベースサーバーの現在の日付、時間、およびタイムスタンプの値を返します。
したがって、仕様上正しくない、つまり移植性がない可能性がある 2 番目の形式を記述できることに、私はすでに驚きました。
私にとって、これを行う「正しい」方法は、次のタイプの日付フィールドを持つクラスを作成することです。 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