【发布时间】:2018-05-07 11:20:17
【问题描述】:
现在怎么样
@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 IS SUPPLIED 由客户端 rest 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 NOT SUPPLIED 由客户端 rest 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/Criteria 似乎很重。
- 用 StringBuilder 来制作查询 String 似乎也是 JDBC 解决方法,但不是合适的优雅解决方案
我无法为 SQL 部分的这种动态更改构建完美的解决方案。有人可以帮忙提供简单的 Spring JPA 解决方案吗?
或
我们是否可以通过一些逻辑在 postgres SQL 中进行操作以在
'AND a.shapeNameList IN( ?2 ) ' 与 ' '
使用COALSCE / NULLIF / IFNULL / CASE WHEN THEN END ? anything ?
我猜这应该是最好的选择。任何帮助表示赞赏。
【问题讨论】:
标签: postgresql spring-data-jpa hibernate-criteria