我正在尝试在同一个查询中混合 HQL 和 SQl。喜欢使用
“来自 Object 对象,TABLE_B tbl,其中 obj.simeProp = tbl.COLUMN”
因为我的客户需要修改查询,学习 HQL 或映射未映射的表是不可能的:(
如果不是休眠,有人知道另一个可以接受这个的 ORM 工具吗?另一个 JPA 实现,还是 JDO?
我已经尝试过了,当然这是行不通的。这对我来说也很有意义:结果没有映射到对象,因此没有某种编码就无法获取对象。我主要是在寻找为什么这不会很快起作用的原因。
这确实行不通,而且我认为它永远不会行得通,但这并不是因为“没有办法获取对象”。
休眠does允许您使用普通 SQL 查询 http://docs.jboss.org/hibernate/stable/core/reference/en/html/querysql.html#d0e13696并提供了许多不同的选项用于将结果映射到实体(或非实体 java 对象)。您可以将查询写为:
SELECT table_A.*
FROM table_A JOIN table_B on table_A.some_prop_column = tableB.other_column
WHERE ...
并通过以下方式从 Hibernate 执行它:
List objectAs = session.createSQLQuery(yourQuerySQL).addEntity(ObjectA.class).list();
问题在于mixingSQL 和 HQL 的一个缺点是它们之间很容易产生冲突——从 HQL 生成的 SQL 可能使用一个表别名,而原始 SQL 可能使用另一个表别名;生成的 SQL 可能包含与原始 SQL 冲突的表/连接等...
最后,一切都让你绝对满意nothing- 它甚至不会帮助你的用例。如果您希望某人修改“混合”HQL / SQL 查询,他们仍然需要知道bothSQL 和 HQL - 至少在区分两者所需的级别上。
话虽如此,如果您的最终用户需要能够自定义该查询,也许您应该考虑使用标准API http://docs.jboss.org/hibernate/stable/core/reference/en/html/querycriteria.html为了根据用户的输入生成您需要的查询。让最终用户修改应用程序中的实际查询是一个巨大的安全漏洞,除非您采取extreme防范措施。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)