有没有一种简单的方法可以从hibernate条件中获取(待生成的)SQL?
理想情况下,我会像这样:
Criteria criteria = session.createCriteria(Operator.class);
... build up the criteria ...
... and then do something like ...
String sql = criteria.toSql()
(But this of course does not exist)
然后的想法是将sql用作巨大的“ MINUS”查询的一部分(我需要找到2个相同模式之间的差异-结构相同,而不是数据相同-
并且Hibernate不支持MINUS)
(顺便说一句,我知道我可以从日志文件中检查SQL)
我已经使用Spring
AOP完成了这样的事情,因此我可以获取应用程序中运行的任何查询的sql,参数,错误和执行时间,无论是HQL,Criteria还是本机SQL。
这显然是脆弱,不安全的,可能会因Hibernate中的更改而中断,等等,但它说明可以获取SQL:
CriteriaImpl c = (CriteriaImpl)query;
SessionImpl s = (SessionImpl)c.getSession();
SessionFactoryImplementor factory = (SessionFactoryImplementor)s.getSessionFactory();
String[] implementors = factory.getImplementors( c.getEntityOrClassName() );
CriteriaLoader loader = new CriteriaLoader((OuterJoinLoadable)factory.getEntityPersister(implementors[0]),
factory, c, implementors[0], s.getEnabledFilters());
Field f = OuterJoinLoader.class.getDeclaredField("sql");
f.setAccessible(true);
String sql = (String)f.get(loader);
尝试将所有物品包装起来并使用,后果自负。
问题内容: 我有一个表 的学生 这样 我想获取所有记录,但不应重复邮政编码。因此,在上述表记录的情况下,应获取记录1和2。将不会提取第3条记录,因为它的邮政编码已在第1条记录中。 问题答案: 以下查询将仅选择不同的“ zip”字段。 以下查询将选择所有字段以及不同的zip字段。
问题内容: 在日志中,我得到: “来自LAHETYS”发生了什么事?使用HQL或/和SQL处理此问题的最佳实践是什么? 另一个问题: 我得到一个例外: 所以我不能将对象投射到我的Lahetys对象上,很奇怪吗? 谢谢!佐美 问题答案: 您的HQL查询无效。LIMIT不是有效的HQL子句。要在Hibernate中做到这一点,只需
我最近尝试了SQL。有一个查询要求,我必须列出“9.显示所有经理的empno、ename、job、hiredate、exp”。我打字 结果,没有获取任何记录。只显示元数据。 以前,其他查询工作正常。 请帮忙!
我有一张siswa和kelas的联合表格。在kelas表中有一列idSiswa,它来自siswa表的id。问题是当kelas加入时,我如何从他那里获得id。当我尝试获取id时,它显示了来自siswa表的id,而不是来自kelas表的id,我也已经使用了右连接和左连接,但仍然没有得到答案 我使用来自laravel的查询生成器来运行查询,这是我的查询
问题内容: 我正在从事C#项目,并且对这项技术不熟悉。 我想从SQL Server 2008中读取一些数据,并编写以下代码 但是我读过一篇有关SQL注入的文章,并且我想使用SQL参数来避免这种情况,但是我不知道如何做。 问题答案: 这是对代码的简单重做。未经测试,但实质上,它包括在一次性对象周围添加using语句以及使用带有参数集合的SqlCommand 注意命令文本如何不直接包含用户和密码的字符
问题内容: 假设有两个表: 表A 表B 表之间的联系是 messageID 字段。 我想要一个查询来生成这样的结果,在该查询中,我将所有字段从表A中拉出,并对表B中每条消息的注释数进行计数,如下所示: 我已经尝试过这样的事情: 但这是行不通的。有任何想法吗?似乎应该可以在一个查询中执行此操作。我正在使用MSSQL。谢谢你的帮助。 问题答案: 标量子查询将起作用: 与往常一样,有很多方法可以改变这只