龙空技术网

如何在jpa查询中使用自定义返回值类型?

32lou 80

前言:

如今咱们对“java构造函数返回值类型”大约比较关切,大家都需要知道一些“java构造函数返回值类型”的相关内容。那么小编同时在网上收集了一些对于“java构造函数返回值类型””的相关知识,希望你们能喜欢,姐妹们快快来学习一下吧!

不写select子句时,jpa默认的返回值是Entity对象,实际就是select子句直接使用Entity的别名的简写方式,当select子句使用Entity对象的部分字段而不是全部字段时,返回值默认是Map,使用起来很不方便,此时可在select子句中指定非Entity返回类型,即:

在@Query注解的hql中使用"select new 全限定类名(参数列表)"的方式,而且该类必须存在包含了参数列表所有参数的构造器,如:"select new com.sample.QueryDTO(type, remark) ...",QueryDTO需要存在构造器public QueryDTO(int type, String remark)或public QueryDTO(Integer type, String remark),否则应用将启动失败,如:Unable to locate appropriate constructor on class [com.sample.QueryDTO]. Expected arguments are: long, java.lang.String;

如果参数列表使用了函数,那么构造器对应参数的类型必须与函数执行后的类型一致,如:"select new com.sample.QueryDTO(sum(type), remark) ...",虽然type为Integer,但sum(type)的结果为long,因此QueryDTO需要存在构造器public QueryDTO(long type, String remark)或public QueryDTO(Long type, String remark);

当返回分页时,from子句中引用的实体需要设置别名,否则当其后的语句为group by时,group会被首先执行的count语句识别为别名,从而导致应用启动失败,如:unexpected token: group near line 1, column 14 [select count(group) from com.sample.domain.jpa.SampleEntity group by unitGuid]

标签: #java构造函数返回值类型