Hibernate 在同一查询中混合HQL和SQL

Hibernate 在同一查询中混合HQL和SQL,hibernate,Hibernate,我试图在同一个查询中混合HQL和SQl。喜欢用 “来自ObjectA obj,表_B tbl,其中obj.someProp=tbl.COLUMN” 因为我的客户机需要修改查询,学习HQL或映射未映射的表是不可能的:( 如果不是hibernate,有人知道另一个可以接受它的ORM工具吗?另一个JPA实现,或者JDO 我已经试过了,当然它不起作用。这对我来说也是有意义的:结果没有映射到对象,因此没有某种编码就无法获取对象。我主要是想知道为什么这在短期内不起作用。这确实不起作用,我认为永远不会,但不是

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

“来自ObjectA obj,表_B tbl,其中obj.someProp=tbl.COLUMN”

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

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


我已经试过了,当然它不起作用。这对我来说也是有意义的:结果没有映射到对象,因此没有某种编码就无法获取对象。我主要是想知道为什么这在短期内不起作用。

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

Hibernate允许您使用并提供许多不同的选项将结果映射到实体(或非实体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,至少在区分这两种查询所需的级别


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

Wow-效果很好。ReallSQL和自动实体加载的酷而健壮的特性!我一直担心必须映射所有HQL实体,以便执行一些简单的SQL连接来检索一种类型的实体。顺便说一句,使用JPA/Hibernate 4.3.7,就这么简单:
Listdaos=em.createNativeQuery(SQL,myDaoClass)。getResultList()