2012-11-16 53 views
8

我试图在一个列上内部连接两个表。 从数据库方面看,没有映射,因为这是我不想讨论的。使用HQL进行内部连接

我想使用INNER JOIN执行HQL查询并检索ROLE对象/结果。

这里是我的HQL到目前为止

session.createQuery( “从角色的作用INNER JOIN参与作为参与ON role.id = involvement.roleid WHERE involvement.id = X”)。名单( );

我看到ON在HQL上不可用。我如何明确地告诉Hibernate只在这一列上JOIN。

我想下面一个太

从角色的作用,参与为参与选择roleSpec WHERE role.ID = involvement.role_id和involvement.id = 27251352

但我得到的ROLE没有映射到异常。

+0

改为使用SQL。 HQL大多只在你有适当的关系和实体映射时才起作用。 (你仍然可以做Theta风格的加入,但我不推荐这么做) –

+0

你能告诉我如何使用Hibernate来执行SQL。其他应用程序广泛使用Hibernate。 – Reddy

+0

在Hibernate的参考中搜索本机查询 –

回答

14

请检查您的ROLE确实是一个映射实体。 另外,你不需要执行“ON” - hibernate知道什么是连接列(我知道如何在JPA中定义这个) - 所以不需要在语句中提供它。 它应该是 -

session.createQuery("from Role as role INNER JOIN Involvement as involvement WHERE involvement.id = X").list(); 

我假设你有角色类映射到角色表,并参与类映射到Involement表。
也许你错误地使用了表名,这就是你得到“未映射”错误的原因。
我上次写HQL(而不是JPA-QL)我使用了以下link作为参考,它提供了所需的所有信息。