在开发中经常遇到数据库存储的json数据,需要查询出来,比如:
select * from event where resource_type='COMPUTE' and event_type='START' and deleted=FALSE
and resource_data ->>'eniIds' like '%ocid1.vnic.oc1.ap-tokyo-1.abxhiljruybcqzennifrmchug63gyfpki4ano6ylo3hmse2atlkl2rjx635a%'

但是同样的代码放在spring boot JPA中就会报错。
@Query(
value = "select * from event where resource_type='COMPUTE' and event_type='START' and deleted=FALSE " +
" and resource_data ->>'eniIds' like %'+:eniId+'%",
nativeQuery = true
)
fun findUserIdAndTenantIdByEniId(@Param("eniId") eniId:String):List<Event>
正确的SQL写法:
select * from event where resource_type='COMPUTE' and event_type='START' and deleted=FALSE
and resource_data ->>'eniIds' like concat('%','ocid1.vnic.oc1.ap-tokyo-1.abxhiljruybcqzennifrmchug63gyfpki4ano6ylo3hmse2atlkl2rjx635a','%')

正确的JAVA JPA写法:
@Query(
value = "select * from event where resource_type='COMPUTE' and event_type='START' and deleted=FALSE " +
" and resource_data ->>'eniIds' like concat('%',:eniId,'%')",
nativeQuery = true
)
fun findUserIdAndTenantIdByEniId(@Param("eniId") eniId:String):List<Event>

本文探讨了在SpringBoot JPA中遇到的查询含有JSON字段的问题,原始SQL查询在直接使用时出现错误。通过分析,指出错误在于LIKE操作符的使用方式,并提供了修正后的SQL和JPA查询表达式。修正后的JPA查询利用了CONCAT函数来正确地进行模糊匹配,从而解决了问题。
1041

被折叠的 条评论
为什么被折叠?



