我正在尝试使用Panache + Hibernate从数据库中获得一列的不同结果。通常,在Hibernate中,您将从查询中返回ArrayList<String>
。
List<String> list = repo
.find("select DISTINCT(a.country) from TMdBrandAll a order by a.country")
.page(Page.ofSize(1000)).list();
但是,如果我尝试使用Panache的这种方法,则会收到ErrorMessage Comiler Error Message
如果我将变量“列表”更改为returnType List<TMdBrandAll>
,则编译错误消失了。
List<TMdBrandAll> list = brandAllRepo
.find("select DISTINCT(a.country) from TMdBrandAll a order by a.country")
.page(Page.ofSize(1000)).list();
当我现在在调试器中检查执行的代码时,我得到了。 Debugger output
如何告诉Panache查询结果将是ArrayList<Strings>
而不是ArrayList<PanacheEntity>
?
感谢您的回答
编辑: 回购代码:
@RequestScoped
@Transactional
public class BrandAllRepo implements PanacheRepositoryBase<TMdBrandAll, Long> {
public void updateBrand(String brandName, String soundexCode, String countryCode, Long active, Long isNew, String user, Long brandAllId) {
update("set brandName = ?1, soundexCode = soundex(pkg_util.f_escape_special_char1(?2))," +
" countryCode = ?3, active = ?4, isNew = ?5, modifiedAt = sysdate, modified_by = ?6 where brandAllId = ?7",
brandName, soundexCode, countryCode, active, isNew, user, brandAllId);
}
}
回购中的工作代码:
@Inject
EntityManager em;
public List<String> findCountries() {
List<String> qres = em
.createQuery("select DISTINCT(a.countryCode) from TMdBrandAll a order by a.countryCode", String.class)
.getResultList();
return new ArrayList<>(qres);
}
通过注入EntityManager和标准的休眠查询,它可以工作。
答案 0 :(得分:2)
这是Panache的局限性。
它总是返回实体的列表。
在BrandAllRepo中创建查找程序方法以返回字符串列表或使用无类型列表:
List list = brandAllRepo
.find("select DISTINCT(a.country) from TMdBrandAll a order by a.country")
.page(Page.ofSize(1000)).list();
您知道列表中将包含字符串。
第二个选项不是很好。我会使用第一个选项。