我正在尝试进行一个查询来构建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 语句?
默认情况下,@Query
不允许本机查询。如果 ORM 处于休眠状态,则查询应为 HQL,或者底层 ORM 支持的任何查询。
由于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)