当前位置: 首页 > 面试题库 >

from子句中的JPA子查询

颜昕
2023-03-14
问题内容

我们正在开发一个使用EJB连接到数据库的Web应用程序

在我们的数据库模型中,我们有一个移动设备表,另一个有功能表,最后一个有手机模型映射功能值的表。模型(id_model,…)功能(id_feature,…)model_features(id_model,id_feature,值)

我们想要执行一个查询,以按匹配特征的数量对模型进行排序。就是说,我们传递了一个要匹配的功能列表(即从1到9),并且我们希望所有包含“
yes”的设备至少是其中一个功能的值,并按照先前的说明对其进行排序。

我们创建了一个执行该工作的SQL查询,它可以工作:

SELECT CONCAT(subquery.numberf*100/9,"%") AS "Features", subquery.idModel AS "ID model"
FROM (select count(*) AS numberf, id_model AS idModel
        FROM model_features
        WHERE value LIKE '%Yes%' AND id_feature IN(1,2,3,4,5,6,7,8,9)
        GROUP BY id_model) subquery
WHERE subquery.numberf > 0
ORDER BY subquery.numberf DESC

由于我们使用的是JPA,因此必须构建JPQL查询,因此无法在FROM子句中包含子查询,并且我们想知道是否可以将子查询“传递”给WHERE子句,而不能以不良的方式影响性能。我们该怎么办?


问题答案:

最后,我们使用本机查询解决了:

 String query = "SELECT ROUND(subquery.numberf*100/" + features + ",0) AS \"matches\", m.id_model AS \"id_model\",  m.name AS \"name\", m.brand AS \"brand\", m.url_pict AS \"url_picture\""
                + " FROM (select count(*) AS numberf, id_model AS idModel FROM model_features WHERE value LIKE '%Yes%' "
                + "AND id_feature IN(" + idFeatures + ") GROUP BY id_model) subquery, Models m WHERE subquery.numberf > 0 "
                + "AND subquery.idModel = m.id_model ORDER BY subquery.numberf DESC, m.name";
return em.createNativeQuery(query).getResultList();


 类似资料:
  • 问题内容: 我们正在将JPA与hibernate用作提供程序,我们有一个查询,该查询包含一个与FROM子句中的子查询的联接,但是会出现以下错误: org.hibernate.hql.ast.QuerySyntaxException:意外令牌:(在第1行第75列附近[SELECT sd from com.hp.amber.datamodel.entities.analysis.SnapshotDat

  • 问题内容: 如何使用Criteria编写以下SQL: 问题答案: 要使用NHibernate,产生如下查询: 我们必须选择: 将子选择映射为实体。 创建原始SQL查询 第一种选择是创建一些,并将其映射为一个实体。如果我们不喜欢视图(或无法创建视图),则可以使用NHibernate映射元素element的功能 : 第二种选择是关于使用NHibernate API创建本机/原始SQL: 它没有从映射中

  • 我有一个Spring Boot应用程序。在其中,我有一个SQL查询,需要创建一个子查询,内部将该子查询的结果与另一个表连接,然后从该内连接的结果中进行选择。但是很明显,JPA不允许您在OF子句中使用子查询(我假设既不使用JPQL也不使用Criteria API)。有没有办法绕过这个? 我考虑过将子查询的结果存储在一个临时实体中(理想情况下不创建可持久化到DB的表),然后从存储在这些实体中的数据中进

  • 我有一个类Api,它包含一个数据列表:

  • MariaDB 子句用于从表中获取数据。它也被用来连接表,这将在后面章节中学习。 语法: 示例1: 假设要从表中检索所有学生信息。参考以下语句中,语句的用法 - 执行上面查询语句,得到以下结果 - 示例2: 从students表中选择一个特定的列。例如,要选择和列,如下查询语句 - 执行上面查询语句,得到以下结果 -

  • Hibernate 中最简单的查询语句的形式如下: from eg.Cat 该子句简单的返回 eg.Cat 类的所有实例。通常我们不需要使用类的全限定名,因为 auto-import(自动引入)是缺省的情况。所以我们几乎只使用如下的简单写法: from Cat 为了在这个查询的其他部分里引用 Cat,你将需要分配一个别名。例如: from Cat as cat 这个语句把别名 cat 指定给类Ca