- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 hibernate 映射 XML 文件中有一个子选择查询(如下所示)。这样做的目的是设置一个基本的 SQL 查询,然后通过 Criteria API 添加各种限制。我正在显示可以排序、过滤和搜索并支持分页的数据,因此 Criteria API 对此非常有用。
<class name="className" table="tableName">
<subselect>
select x.col1 AS ID,
c.col2 AS a
....
from table1 x,
table2 y
where x.id = y.id
....
....
</subselect>
<id name="ID" column="ID"/>
<property name="a" column="a"/>
...
...
</class>
然后 Java 代码将通过执行以下操作来添加限制
Criteria c = sessionFactory.getCurrentSession().createCriteria(tableName.class);c.add(Restrictions.allEq(m));//其中 m 是包含列过滤器的 HashMap
但是,似乎使用子查询来声明基本查询会导致 MySQL 的性能非常差。 Hibernate 将基本查询放入一个子查询中,该子查询位于具有添加限制的外部查询的 FROM 子句中。因此,需要说明的是,Hibernate 创建了一个类似 A 的查询,而我想要的查询是 B,即我不想要子查询,因为它会降低性能。
A: select _tmp.* B: select t1.col1,
from ( t1.col2
select t1.col1, from table1 t1,
t1.col2 table2 t2
from table1 t1, where t1.id = t2.id
table2 t2 and t1.col1 = 'blah'
where t1.id = t2.id order by t1.col desc
...
) _tmp
where _tmp.col1 = 'blah'
order by _tmp.col2 desc
所以我的问题是如何在不使用允许我使用 Criteria API 的子选择的情况下在 Hibernate 中创建基本查询?让 Hibernate 运行查询 B 而不是查询 A 的最佳方法是什么?
我知道我可以在映射文件中创建命名查询并加载它们,但这会加载一个查询,虽然允许我添加某些限制,但它不如 Criteria 好,因为它不允许选项排序等...
那么除了使用两者之外还有其他选择吗
<hibernate-mapping>
<class name="" table="">
<subselect></subselect>
</class>
</hibernate-mapping>
or
<hibernate-mapping>
<sql-query name="">
<return-scalar column="col" type="string"/>
</sql-query>
</hibernate-mapping>
因为第一个选项会通过使用子查询降低性能,而第二个选项不允许我(据我所知?)使用 Criteria API。
最佳答案
我有一个解决方案,所以我在这里添加它以供引用。
我的要求是使用 Hibernate 从多个表中检索数据并使用 Criteria API 过滤结果集。作为 Hibernate 和 Criteria 的新手,我选择了当时我认为最简单的选项,即手工制作一些原始 SQL 以将数据拉到一起并使用 Criteria 过滤该数据。 subselect 的使用是我当时唯一知道的加载手工制作的 SQL 语句以供 Criteria 函数进一步修改的方法。这在功能方面运行良好,但如上所述,在针对 MySQL 运行时表现非常差。
我没有意识到我可以用 Criteria 做的是使用别名来限制关联。所以我放弃了原始 SQL,使用 Hibernate 检索我的父数据对象,并使用 Criteria Aliases 对所有必需的关联添加限制。与 5 秒相比,此方法的执行时间不到 100 毫秒。
关于mysql - 使用 Criteria API : slow performance in MySql 的 Hibernate 子选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11900462/
我需要创建一个 Hibernate 标准限制,或者 3 个条件。问题是最后一个条件实际上是使用 AND 运算符的条件。 我的第一个条件: Criterion startInRange = Restri
假设我的类型为 User,其中包含带有属性 Name 的类 Tenant 的对象。 我想从数据库用户中选择,其租户包含给定名称。 在 Hibernate Criteria 中,我可以使用别名简单地实现
select (case when dob = '2020-02-03' then 'adult' else 'teenage' end) as Age
我正在使用 Java 中的 hibernate 条件进行 MySql 查询。我在下面给出了我的代码的小快照。 Criteria criteria = getCurrentSession
我正在尝试使用条件查询进行删除。但看起来不错,但在运行时显示错误。我收到如下错误: Caused by: java.lang.AbstractMethodError: org.hibernate.ej
我目前正在尝试实现半边折叠以执行增量重新网格化。我正在处理流形网格。考虑以下简单网格: 目标是将 a 折叠成 b。 然而,在这种情况下,这会导致非流形网格 我想阻止。我的问题是: 我怎样才能提前做到这
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在考虑为我的应用使用 Firebase Analytics。我很好奇: 保留的标准是什么?保留是否跟踪具有我必须发送的唯一 ID 或唯一设备的用户帐户? 如果用户从多个设备登录到我的应用程序,我将
我想测试一个“withCriteria”闭包,但不知道如何去做。我看到了如何模拟 withCriteria 调用,但没有测试闭包中的代码。在运行执行“withCriteria”的测试时,我不断收到 M
如何从以下 sql 创建 Hibernate 条件查询? String hql = "select e.employeeId,m.meetingId,e.firstname from Employee
我担心我可能已经表达了我的previous question很糟糕,所以为了清楚起见,我重新开始。 想象许多表,每个表之间存在 OneToMany 关联; 农场 -> 田地 -> RegionGrou
我将如何使用条件 API 执行以下 Hibernate 查询。我有一个对象 Parent 和 List Children。我想搜索所有 parent 并找到哪些 parent 包含指定的 child
我正在使用 Oracle,目前无法实现我需要的查询。 假设我有下表: - ID Date Type Value - 1 01/12/2016 prod 1 - 2
有没有办法用 JPA 2 CriteriaBuilder 编写与以下查询等效的内容? select * from season s1 where end = ( select max(end)
背景 我们定期对多个项目进行测试,并产生测试结果(通过或失败)。单个测试可以应用于多个项目,单个项目可以对其进行多个不同的测试。 我们需要做的是生成当前未通过测试的所有项目/测试组合的列表,以及自上次
SQL: String hql1 = "SELECT /* PARALLEL(MVR,16) PARALLEL(MVRS,16)*/ * FROM ICM MINUS SELECT I1.* FRO
为什么这是不可能的? Criteria crit1 = sess.createCriteria(Criteria1Class.class); Criteria crit2 = crit1.creat
我通常在 hibernate 状态下使用 criteria.addOrder(Order.desc("myField")); 如何在不使用 hsql 的情况下在 Hibernate 中编写此语句? s
假设我有一个具有以下值的表 Plan。 planName(VARCHAR2) | validFrom(timestamp) | validTo(timestamp) -----------------
给定映射的 hibernate 类: @Entity public class MyTestClass { /* id and stuff */ private Integer aValue;
我是一名优秀的程序员,十分优秀!