質問

ネイティブ 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();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top