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

Ser*_*era 3 hibernate

我正在尝试在同一个查询中混合使用HQL和SQl.喜欢用

"来自ObjectA obj,TABLE_B tbl,其中obj.someProp = tbl.COLUMN"

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

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

我试过这个,当然它不起作用.这对我来说也很有意义:结果没有映射到对象,因此没有一些编码就无法获得对象.我大部分都在寻找原因,为什么这不会很快发挥作用.

Chs*_*y76 10

这确实不起作用,我认为它永远不会,但不是因为"没有办法获得对象".

休眠允许您使用普通的SQL查询,并提供了大量的不同选项的结果映射到你的实体(或者非实体的Java对象).您可以将查询编写为:

SELECT table_A.*
  FROM table_A JOIN table_B on table_A.some_prop_column = tableB.other_column
 WHERE ...
Run Code Online (Sandbox Code Playgroud)

并通过以下方式从Hibernate执行:

List objectAs = session.createSQLQuery(yourQuerySQL).addEntity(ObjectA.class).list();
Run Code Online (Sandbox Code Playgroud)

这个问题混合 SQL和HQL是,它很容易进入它们之间的冲突-从HQL生成的SQL可以使用一个表的别名,原始SQL他人; 生成的SQL可能包含与原始SQL冲突的表/联接等...

最后,所有这些都让你绝对没有 - 它甚至不会帮助你的用例.如果你希望有人来修改一个"混合" HQL/SQL查询,他们还需要知道两个 SQL和HQL -至少在必要的区分两者的水平.

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