Spring数据 - JPA:使用DTO和IF语句进行查询

时间:2017-09-06 13:50:50

标签: java mysql jpa

我正在尝试创建一个构建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语句?

1 个答案:

答案 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)