言語を持つエントリ MenuItem があります。デバイスによって選択された言語を持つすべての MenuItems を必要とするデバイスもあります。(次に、デバイスが MenuItem にアクセスできるかどうかを決定する AccessGroup もあります)
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 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 : org.hibernate. PropertyAccessException: models.Language.id のリフレクション ゲッターによってフィールド値を取得できませんでした
しかし、model.Language.id はエンティティの一部であるため、エラーがわかりません。