java - 如何在maven项目中使用动态查询?
问题描述
是否可以像下面的代码一样执行动态 jpa 或本机查询
我将“WHERE”条件作为字符串传递给存储库类,这是正确的方法吗?
List<Doctor1> doctorsList = null;
String str1 = null;
if (date != null) {
str1 = " d.hospitalId = " +hospitalId + " AND dt.date = '" + date + "' AND d.active = 1";
if ((date != null) && (gender != null)) {
str1 = str1 + " AND d.gender = '" + gender + "'";
}
if ((date != null) && (specializationId != null)) {
str1 = str1 + " AND dsa.doctorId = d.doctorId AND dsa.active = 1";
}
else if (gender != null) {
str1 = " d.hospitalId = " +hospitalId + " AND d.gender = '" + gender + "' AND d.active = 1";
if ((gender != null) && (specializationId != null)) {
str1 = str1 + " AND dsa.doctorId = d.doctorId AND dsa.active = 1";
}.........
}
doctorsList = doctorsRepository.selectDoctorDetails(str1);
DoctorRepository 类
@Query("select distinct d from Follow_My_Doct.tbl_doctors d LEFT JOIN DoctorDutyTime ddt ON ddt.doctorId = d.doctorId AND ddt.active = 1 LEFT JOIN DoctorSpecilaizationAssociation dsa ON dsa.active = 1 AND dsa.doctorId = d.doctorId :str1")
List<Doctor1> selectDoctorDetails(String str1);
或者
@Query(value ="select distinct * from Follow_My_Doct.tbl_doctors d LEFT JOIN Follow_My_Doct.tbl_doctors_duty_time ddt ON ddt.doctorId = d.doctorId AND ddt.active = 1 LEFT JOIN Follow_My_Doct.tbl_doctor_specialization_association dsa ON dsa.active = 1 AND dsa.doctorId = d.doctorId ?1, nativeQuery = true)
List<Doctor1> selectDoctorDetails(String str1);
解决方案
我不知道。这种方法可能会解决您的问题。我们在使用Sturts framework
. 你可以试试 -
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
...
...
@PersistenceContext
private EntityManager entityManager;
public void test() {
String queryStr = "select * from doctor where ";
Query query = entityManager.createNativeQuery(queryStr);
List<Doctor1> doctorsList = null;
String str1 = null;
if (date != null) {
str1 = " d.hospitalId = ?1 AND dt.date = ?2 AND d.active = ?3";
query.setParameter(1, hospitalId);
query.setParameter(2, date);
query.setParameter(3, 1);
//for number tracking inside if-else, use extra variable.
if ((date != null) && (gender != null)) {
//update using similar way
str1 = str1 + " AND d.gender = '" + gender + "'";
}
if ((date != null) && (specializationId != null)) {
//
str1 = str1 + " AND dsa.doctorId = d.doctorId AND dsa.active = 1";
}
}else if (gender != null) {
str1 = " d.hospitalId = " +hospitalId + " AND d.gender = '" + gender + "' AND d.active = 1";
if ((gender != null) && (specializationId != null)) {
str1 = str1 + " AND dsa.doctorId = d.doctorId AND dsa.active = 1";
}
}
doctorsList = doctorsRepository.selectDoctorDetails(entityManager,query, str1);
}
在doctorRepository
:
public Doctor1 selectDoctorDetails(EntityManager entityManager, Query query, String str) {
try {
return new Doctor1((Object[]) query.getSingleResult());
} catch (Exception e) {
e.printStackTrace();
}
}
推荐阅读
- php - 如何通过 ajax 在 PHP 中的数组中发送文件(图像)?
- javascript - 无法读取未定义的属性“forEach”-Firebase 和 Javascript
- css - 居中的表格,其中包含跨越两列文章的链接
- javascript - Javascript, 的
元素显示 [object HTMLInputElement] 为什么会显示这个?
- android - 无法弄清楚如何在我的应用程序中使用匕首。似乎是循环依赖的情况
- python - 如何存储嵌套循环数据
- powershell - 使用 Powershell 从 AD 组获取嵌套 CN 值
- reactjs - 难以理解模拟的 Jest 函数
- java - 如何使用扫描仪读取文件对象
- python - 获取输入 yaml 文件以创建 sns 主题的 Python 脚本