1

我正在尝试使用 Panache+Hibernate 从我的数据库中获得一列的不同结果。ArrayList<String>通常在 Hibernate 中,您会从查询中得到回复。

List<String> list = repo
            .find("select DISTINCT(a.country) from TMdBrandAll a order by a.country")
            .page(Page.ofSize(1000)).list();

但是,如果我使用 Panache 尝试这种方法,我会收到 ErrorMessage Comiler 错误消息

如果我将变量“list”更改为 returnType List<TMdBrandAll>,编译错误就消失了。

List<TMdBrandAll> list = brandAllRepo
            .find("select DISTINCT(a.country) from TMdBrandAll a order by a.country")
            .page(Page.ofSize(1000)).list();

当我现在在调试器中检查执行的代码时,我得到了。 调试器输出

我如何告诉 Panache 查询的结果将是 anArrayList<Strings>而不是 an 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 和标准休眠查询,它可以工作。

4

1 回答 1

3

这是 Panache 的局限性。

看看代码https://github.com/quarkusio/quarkus/blob/master/extensions/panache/hibernate-orm-panache/runtime/src/main/java/io/quarkus/hibernate/orm/panache/ PanacheRepositoryBase.java

它总是返回实体的列表。

在 BrandAllRepo 中创建一个返回字符串列表的查找器方法或使用无类型列表:

List list = brandAllRepo
        .find("select DISTINCT(a.country) from TMdBrandAll a order by a.country")
        .page(Page.ofSize(1000)).list();

你知道列表中会有字符串。

第二个选项不是很好。我会使用第一个选项。

于 2020-04-21T14:38:15.360 回答