Spring mvc 使用SELECT CASE WHEN的JPA查询
有这样的疑问,Spring mvc 使用SELECT CASE WHEN的JPA查询,spring-mvc,jpa,spring-data-jpa,Spring Mvc,Jpa,Spring Data Jpa,有这样的疑问, select * from job_profile where case when exists ( select 1 from job_profile where screening_type_id = 2 and job_category_id = 4 ) then screening_type_id = 2 and job_category_id = 4 else screening
select *
from job_profile
where case
when exists (
select 1
from job_profile
where screening_type_id = 2 and job_category_id = 4
)
then screening_type_id = 2 and job_category_id = 4
else screening_type_id =4
end;
我需要用JPA写这篇文章
String GET_JOB_VACCINATIONS_BY_JOB_CAT_ID_AND_SCRN_TYPE_ID = "SELECT jobvacc FROM JobVaccination jobvacc WHERE CASE"
+ " WHEN EXISTS ( SELECT 1 FROM JobVaccination jobvacc2 WHERE jobvacc2.jobCategoryMast.jobCategoryId=:jobCategoryId AND jobvacc2.screeningTypeMast.screeningTypeId=:screeningTypeId )"
+ " THEN jobvacc.jobCategoryMast.jobCategoryId=4 AND jobvacc.screeningTypeMast.screeningTypeId=2 "
+ " ELSE jobvacc.screeningTypeMast.screeningTypeId=2"
+ " END";
尝试了这种方法,引发异常,如:org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:=第1行第260列附近[选择
我们不能用JPA编写案例查询吗
参考了该链接,该链接回答是。问题似乎在于当尝试替换查询中的参数时,您是否可以尝试一个没有参数的示例来检查case KeyWork是否工作正常?尝试了这种方式**String GET\u JOB\u CAT\u ID和\u SCRN\u TYPE\u ID=从jobvacc中选择jobvacc WHERE case+when EXISTS从JobVac2中选择1,其中JobVac2.JobCategoryMaster.jobCategoryId=4和JobVac2.screeningTypeMast.screeningTypeId=4+然后jobvacc.JobCategoryMaster.jobCategoryId=4和jobvacc.screeningTypeMast=2+结束;**-相同的例外情况不允许然后想一想,屏蔽类型为2,作业类别为4,否则屏蔽类型为4是一个合法的SQL查询片段。实际大小写应该用在SELECT子句而不是WHERE子句中。你想用这个片段做什么?查询语句工作得很好。在PostgreSQL中尝试过。如果这个屏蔽类型为2,作业类别为4返回清空然后获取数据屏蔽类型id=4。