HQL在3个表之间多对多

时间:2015-05-08 11:59:30

标签: mysql sql hibernate many-to-many hql

我有3张桌子:

用户 - >> - 多对多 - >> - Userapp - >> - 多对多 - >> - 应用

用户有:

  • 用户id

  • 的userName

UserApp

  • 用户id

  • 的applicationID

Applicaiton

  • 的applicationID

  • applicaitonName

我没有成功创建一个HQL查询,该查询返回一个特定用户的每个应用程序。

我的HQL:

select a.userId, a.userName from Application b join b.userId a where b.userId = 1

简化我想做的查询:from Application WHERE Userapp.userID = 1

你可以帮帮我吗?

编辑:

我的工具:

  • Netbean 8.x

  • Hibernate插件

第二个错误:org.hibernate.hql.internal.ast.QuerySyntaxException: Userapp is not mapped

当我从数据库创建hibernate映射文件和POJO时,它创建了2个对象:User和Application。但不是关联表" Userapp"

我的hibernate.reveng.xml:

<hibernate-reverse-engineering>
  <schema-selection match-catalog="allin"/>
  <table-filter match-name="user"/>
  <table-filter match-name="application"/>
  <table-filter match-name="userapp"/>
</hibernate-reverse-engineering>

问候

1 个答案:

答案 0 :(得分:1)

我认为你的查询应该是这样的:

SELECT a.applicaitonName
FROM User u
    LEFT JOIN UserApp ua ON u.userId= ua.userId
    LEFT JOIN Application a On ua.applicationId= a.applicationId
WHERE
    u.userName = ?

SELECT a.applicaitonName
FROM UserApp ua
    LEFT JOIN Application a On ua.applicationId= a.applicationId
WHERE
    ua.userId = ?