当前位置: 首页 > 知识库问答 >
问题:

如何使用 JPA 条件查询选择最小值(string_col)?

计承德
2023-03-14

JPA Criteria似乎坚持认为min()(和max())只适用于数字字段。然而,情况并非如此,因为SQL数据库确实可以从字符串列中选择min()和max()值。我还可以使用JQL选择字符串列的min()或max()值。

但是,当使用条件查询时,编译器会在 min() 与字符串列一起使用时进行报错:绑定不匹配:条件生成器类型的泛型方法 min(表达式)不适用于参数(子查询.get(“string_column”))。推断的类型 String 不是有界参数的有效替代项

此查询有效:

"select new com.epsilon.totalfact.web.api.model.UPCDetails" +
"(u.id, d.name as dimension, c.name as category, u.name, u.description," +
" u.keywords, u.userNotes,  u.restrictedResellerFlag, u.hidden," +
" (select min(p.rateId) from u.platforms p)" +
"  || case when (select min(p.rateId) from u.platforms p) != (select max(p.rateId) from u.platforms p) then concat(' ~ ',(select max(p.rateId) from u.platforms p)) else '' end" +
"  as deRateId" +
" )" +
" from UPC u " +
" join u.category c" +
" join c.dimension d" +
" order by d.name, c.name, u.name",

并且此条件查询具有上述错误:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<UPCDetails> query = cb.createQuery(UPCDetails.class);
Root<UPC> u = query.from(UPC.class);
Join<UPC, Category> c = u.join("category");
Join<UPC, Dimension> d = c.join("dimension");

Subquery<String> sub = query.subquery(Number.class);
Root<UPC> subRoot = sub.from(UPC.class);
SetJoin<UPC,Platform> subPlatform = subRoot.join(UPC_.platforms);
sub.select(cb.min(subPlatform.get("rateId")));

共有1个答案

桂阳文
2023-03-14

数学家提供了答案,你需要使用最小()最大()而不是min()max()来表示字符串和其他类型。

 类似资料:
  • 我试图使用JPA标准编写以下查询,但我无法选择子查询中的多列。 我陷入了下面的实现过程中,无法找到如何在子查询中选择多个列。请看我在代码中的评论(第三行)。 请帮我解决这个问题。

  • 但是我在遗留系统上有一个具有许多属性的对象,我只想选择几个,尽管我知道选择几个属性通常是很快的。 如果不使用条件查询,这可能吗?

  • 假设我有一个名为HQL(findRoomQuery)的文件: House实体的映射如下: 虽然Room实体是这样的: 这种关系是一个房子可以有一个或多个房间。 执行查询的代码如下: 您可以从选择r(r是h.room列表的别名)中看到HQL返回房间实体。 如何使用Hibernate条件查询做同样的事情?可能吗?

  • 我试图使用jpa组件来选择从标题中获取的id。我在文档中找到了一个使用本机select查询的示例: 我试图用${header.id}替换“1”常量: 这似乎不管用,我明白了: 也许还有别的方法可以让它发挥作用?

  • 问题内容: 这可能比我做的要容易,但是基本上我需要做的是选择列中具有最接近数字的行作为指定值。例如: 数据库中指定列中的3行的值列表:10、15、16 如果我指定我想要最接近14的行,它将选择15的行。 另外,如果有2+行相同的距离,则随机选择其中之一。 问题答案: 一种选择是遵循以下方式: 要选择随机记录,可以将其添加到子句中。这种方法的缺点是您不能从索引中得到任何好处,因为您必须对派生值进行排