簡體   English   中英

在 JPQL 的本機查詢中使用 BETWEEN

[英]Using BETWEEN in native query in JPQL

我嘗試在 JPQL 中使用BETWEEN進行查詢,我已經在 SQL 中對其進行了測試並且可以正常工作,但是當我在 JPQL 中實現時出現錯誤:

Caused by: javax.persistence.PersistenceException: 
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.0.v20170811-d680af5): 
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: 
Incorrect syntax near ':'.
Error Code: 102"

我不明白為什么在:附近出現錯誤,有人可以幫我弄清楚嗎?

這是我的代碼:

public List<Object[]> reportPendapatan(String tahun) {
    String tahun1 = tahun +"-01-01";
    String tahun2 = tahun +"-12-31";
    return em.createNativeQuery("SELECT p.tanggal, m.nama, pg.nama_jenis, g.nama_guru,pg.harga_masuk FROM Pendaftaran p, Murid m, pengajian pg, Guru g  WHERE p.id_murid = m.id_murid and p.tanggal between :tahun and :tahun2 and p.id_guru = g.id_guru and p.id_jenis = pg.id_jenis and p.status=4")       
            .setParameter("tahun", tahun1)
            .setParameter("tahun2", tahun2)
            .getResultList(); 
}

根據這個答案,EclipseLink 在使用? 前綴而不是:

public List<Object[]> reportPendapatan(String tahun) {
    String tahun1 = tahun +"-01-01";
    String tahun2 = tahun +"-12-31";
    return em.createNativeQuery(
        "SELECT p.tanggal, m.nama, pg.nama_jenis, g.nama_guru,pg.harga_masuk "
        + "FROM Pendaftaran p, Murid m, pengajian pg, Guru g "
        + "WHERE p.id_murid = m.id_murid and p.tanggal between ?tahun and ?tahun2 "
        + "and p.id_guru = g.id_guru and p.id_jenis = pg.id_jenis and p.status=4")
        .setParameter("tahun", tahun1)
        .setParameter("tahun2", tahun2)
        .getResultList(); 
}

另一個選項是分別為tahun1tahun2使用位置參數1 和 2:

    // ...
    return em.createNativeQuery(
        "SELECT p.tanggal, m.nama, pg.nama_jenis, g.nama_guru,pg.harga_masuk "
        + "FROM Pendaftaran p, Murid m, pengajian pg, Guru g "
        + "WHERE p.id_murid = m.id_murid and p.tanggal between ? and ? "
        + "and p.id_guru = g.id_guru and p.id_jenis = pg.id_jenis and p.status=4")
        .setParameter(1, tahun1)
        .setParameter(2, tahun2)
        .getResultList(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM