0

言語を持つエントリ 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 はエンティティの一部であるため、エラーがわかりません。

4

1 に答える 1