我有一個條目MenuItem,它有一種語言。 我也有一個設備,它需要所有菜單項都有設備選擇的語言。 (然後還有一個AccessGroup,它確定設備是否可以訪問MenuItem)JPQL和使用休眠選擇1:n關係
我有一個查詢適用於AccessGroup選擇,但無法考慮如何制定查詢以包含語言選擇。
簡體:
MenuItem
- id
- published
- Language
- AccessGroup
- App
Device
- id
- List<Languages>
- User
AccessGroup
- id
- universal
- <List>AccessGroupLink
AccessGroupLink
- id
- Device
- User
- AccessGroup
- perpetual
- validTo
如何做到這一點的JPQL。目前我已經/嘗試過(使用Play!框架):
return find("SELECT DISTINCT m FROM MenuItem m " +
"INNER JOIN m.accessGroups ag " +
"LEFT OUTER JOIN ag.accessGroupLinks agl " +
"WHERE m.app = ? AND m.language IN ? AND (ag.universal = TRUE OR ((agl.device = ? OR agl.user = ?) AND (agl.validTo >= ? OR agl.perpetual = TRUE))) AND m.published = true", device.app, device.languages, device, device.user, new Date()).fetch();
我在device.languages中添加了m.language,但這不起作用。所以我想我必須添加一個JOIN,但由於某種原因無法看到。所以,任何幫助真的很感激。
編輯: 我與查詢得到上面的錯誤是:
一個play.db.jpa.JPABase $ JPAQueryException在執行查詢SELECT DISTINCT米菜單項米INNER JOIN M有被抓,錯誤。 accessGroups ag LEFT OUTER JOIN ag.accessGroupLinks agl WHERE m.app =? AND m.language IN? AND(ag.universal = TRUE OR((agl.device =?OR agl.user =?)AND(agl.validTo> =?OR agl.perpetual = TRUE)))AND m.published = true:org.hibernate .PropertyAccessException:無法通過models.Language.id的反射getter獲取字段值
但是我不明白錯誤,因爲model.Language.id是實體的一部分。