我正在尝试创建一个构建DTO对象的查询:
@Query("Select new com.mycorp.rh.web.rest.dto.AnalyseProductionDTO(a.client.name, IF(a.salarie,'yes','no'))
from Activity a where a.year = ?1 and a.month = ?2")
List<AnalyseProductionDTO> getAnalyseProduction(Year year, Month month);
当我在查询中放入IF语句时,它不起作用 我正在接受
java.lang.IllegalArgumentException:查询验证失败
我可以这样做:
@Query("Select new com.mycorp.rh.web.rest.dto.AnalyseProductionDTO(a.client.name, 'yes')
from Activity a where a.year = ?1 and a.month = ?2")
List<AnalyseProductionDTO> getAnalyseProduction(Year year, Month month);
是否可以在查询中使用的构造函数中包含IF语句?
答案 0 :(得分:2)
默认情况下@Query
不允许本机查询。如果ORM是休眠状态,或者底层ORM支持的任何内容,则查询应为HQL。
由于IF()函数是MySQL的原生函数,而ORM查询语言不支持,因此验证失败。
您可以在@Query.nativeQuery
设置为true
的情况下尝试以下操作。
@Query(value = "Select new com.mycorp.rh.web.rest.dto.AnalyseProductionDTO(a.client.name, IF(a.salarie,'yes','no'))
from Activity a where a.year = ?1 and a.month = ?2", nativeQuery = true)