gpt4 book ai didi

hibernate - 在同一个查询中混合使用 HQL 和 SQL

转载 作者:行者123 更新时间:2023-12-01 08:41:51 24 4
gpt4 key购买 nike

我试图在同一个查询中混合 HQL 和 SQl。喜欢使用

“来自 ObjectA obj, TABLE_B tbl where obj.someProp = tbl.COLUMN”

因为我的客户需要修改查询,而学习 HQL 或映射未映射表是不可能的:(

如果不是 hibernate ,有人知道另一个可以接受这个的 ORM 工具吗?另一个 JPA 实现,或 JDO?

这个我试过了,当然不行。这对我来说也很有意义:结果没有映射到对象,所以没有某种编码就无法获取对象。我主要是在寻找为什么这不会很快起作用的原因。

最佳答案

这确实不起作用,我认为它永远不会起作用,但不是因为“无法获取对象”。

hibernate 允许您使用 plain SQL queries并提供了许多不同的选项来将结果映射到您的实体(或非实体 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();

的问题混合 SQL 和 HQL 之间很容易发生冲突——从 HQL 生成的 SQL 可能使用一个表别名,原始 SQL 使用另一个;生成的 SQL 可能包含与原始 SQL 等冲突的表/连接...

最后,一切都让你绝对 没什么 - 它甚至不会帮助您的用例。如果您希望某人修改“混合”HQL/SQL 查询,他们仍然需要知道 两者 SQL 和 HQL - 至少在区分两者所需的级别上。

综上所述,如果您的最终用户需要能够自定义该查询,也许您应该考虑使用 Criteria API为了根据用户的输入生成您需要的查询。让最终用户修改应用程序中的实际查询是一个巨大的安全漏洞,除非您使用 极端预防措施。

关于hibernate - 在同一个查询中混合使用 HQL 和 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1538577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com