在 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();
}
其他选项是使用 位置参数 1 和 2 分别用于 tahun1
和 tahun2
:
// ...
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();
我尝试在 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();
}
根据 ?
前缀而不是 :
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();
}
其他选项是使用 位置参数 1 和 2 分别用于 tahun1
和 tahun2
:
// ...
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();