سؤال

مع 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 الوظائف المضمنة التالية، التي يمكن استخدامها في المكان أو وجود جملة لاستعلام.

إذا كانت قيمة أي حجة لتعبير وظيفي لاغيا أو غير معروف، فإن قيمة التعبير الوظيفي غير معروف.

[...]

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