在 mysql 中模拟休眠查询

Posted

技术标签:

【中文标题】在 mysql 中模拟休眠查询【英文标题】:simulating a hibernate query in mysql 【发布时间】:2014-03-26 21:35:44 【问题描述】:

我有一个查询没有产生任何结果,即使底层数据库中肯定有与查询对应的数据。该查询正在由休眠运行,我想通过直接在 mysql 中运行查询来验证它。有人可以帮我从休眠转换为 SQL,以便我可以查看查询是否产生任何结果?

这是 Eclipse 控制台说正在运行的休眠查询:

select
 drugword0_.name as name1_12_2_,
 concepts1_.word as word1_12_4_,
 drugconcep2_.rxcui as rxcui2_13_4_,
 drugconcep2_.rxcui as rxcui1_10_0_,
 atoms3_.rxcui as rxcui3_10_5_,
 atoms3_.rxaui as rxaui1_39_5_,
 atoms3_.rxaui as rxaui1_39_1_,
 atoms3_.rxcui as rxcui3_39_1_,
 atoms3_.str as str2_39_1_ 
from drugwords drugword0_
 left outer join drugwordsconsoJunction concepts1_ on drugword0_.name=concepts1_.word
 left outer join drugconcepts drugconcep2_ on concepts1_.rxcui=drugconcep2_.rxcui
 left outer join rxnconso atoms3_ on drugconcep2_.rxcui=atoms3_.rxcui where drugword0_.name=?

如何将休眠查询转换为 MySQL 数据库的 sql 查询的工作语法? 为什么您认为我的休眠查询没有返回任何结果?休眠映射是否设置不正确?

为了帮助人们了解 hibernate 是从什么开始的,我从我的 spring mvc hibernate 应用程序中发布了一些代码。 注意:为了保持这篇文章的简短,我已将一些相关代码上传到文件共享站点。您可以通过单击以下链接查看代码:DrugWord 实体的代码是 at this link。DrugConcept 实体的代码是 at this link。DrugAtom 实体的代码是 at this link。 MySQL中创建底层数据表的代码是at this link。 填充基础数据表的代码is at this link。 一张表is at this link的数据。 另一个表is at this link 的数据。 (这是一个大文件,可能需要一些时间才能加载。)

为了帮助人们可视化基础数据,我提供了一个显示基础表中数据的前 2 个查询结果的打印屏幕,如下所示:

【问题讨论】:

Hibernate show real SQL的可能重复 【参考方案1】:

ORM 有时对于如何将其查询语言转换为 SQL 有相当独特的看法,这可能会导致各种问题,从缓慢的查询到奇怪或不存在的结果。

因此,我建议您激活查询日志(请参阅 here 或 here),这将是实际发送到服务器的 SQL。

【讨论】:

感谢您抽出宝贵时间回答。您发送的链接没有为以前从未使用过这些技术的人解释关键步骤。您能否为刚接触 hibernate 和 MySQL 的人写出明确的说明? 实际上,两个链接的答案还包含指向 Hibernate 帮助的链接,其中解释了配置日志记录:docs.jboss.org/hibernate/core/4.1/manual/en-US/html/… ...

以上是关于在 mysql 中模拟休眠查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 交叉联接查询上的休眠异常

在休眠中将“反引号”添加到列名

休眠查询日期仅比较月份

我可以对未映射到表的实体使用休眠查询语言吗?

休眠查询异常:在 JPA 查询期间无法解析实体属性

垃圾收集开销限制 - 休眠