В настоящее время, как это
@Service
class Impl{
public ResponseEntity<?> find(patientIdList,shapeNameList){
someEntity = repository.findByFilters(patientIdList,shapeNameList);
return someEntity;
}
}
@Entity
@NamedNativeQuery(
name = "MyEntity.findByFilters",
query = "_________________________________",
resultSetMapping = "dummyMapping"
))
@SqlResultSetMapping(
name = "dummyMapping",
...
)
public class ...{
}
ИСПОЛЬЗУЕМЫЕ СЛУЧАИ:
когда shapeNameList ПОСТАВЛЯЕТСЯ клиентом, оставляя ввод json, тогда @ Namednativequery.query, упомянутый выше, должен быть:
-------------------------------------------------- -------------------------------------------------- -------------------
query = SELECT DISTINCT a.shape_name as shapename, a.patient_id patientId, a.shape_type_id as shapetypeid
FROM pairdb.tbl_sf_density a
WHERE a.patient_id IN( ?1 )
AND a.shapeNameList IN( ?2 ) --this line needs to be dynamically incorporated
group by shapename;
когда shapeNameList НЕ ПОСТАВЛЯЕТСЯ клиентом, оставляя ввод json, тогда @ Namednativequery.query, упомянутый выше, должен быть:
-------------------------------------------------- -------------------------------------------------- -------------------
query = SELECT DISTINCT a.shape_name as shapename, a.patient_id patientId, a.shape_type_id as shapetypeid
FROM pairdb.tbl_sf_density a
WHERE a.patient_id IN( ?1 )
-- AND a.shapeNameList IN( ?2 ) --this line needs to be dynamically omitted from the query within @NamedNativeQuery above
group by shapename;
- Спецификация + QueryDSl / Критерии кажется тяжелым для этой цели.
- Также StringBuilder для создания запроса String также кажется обходным решением JDBC, но не является правильным элегантным решением
Мне не удается создать идеальное решение для этого динамического изменения части SQL. Может кто-нибудь помочь, пожалуйста, с простым решением Spring JPA?
OR
Можем ли мы просто манипулировать в Postgres SQL некоторой логикой для переключения между
'AND a.shapeNameList IN( ?2 ) '
против ' '
используя COALSCE / NULLIF / IFNULL / CASE WHEN THEN END ? anything ?
Наверное, это лучший вариант. Любая помощь приветствуется.