2016-07-07 10 views
1

RoleGroupEntityテーブルで特定のロールを割り当てたGroupEntityオブジェクトを取得する必要があります。名前付きクエリjoin select

私はそのようにこれを実行しよう:

@NamedQuery(name = "GroupEntity.getGIDs", query = "SELECT o FROM RoleGroupEntity u JOIN FETCH u.GroupId o WHERE u.role_id LIKE :role_id") 

が、私が得た:

org.hibernate.QueryException: could not resolve property: role_id of: RoleGroupEntity 

Entitesサンプル:

@Entity 
@Table(name = "group") 
public class GroupEntity implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @Column(name = "gid_number") 
    private Long gid_number; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "GroupId") 
    private List<RoleGroupEntity> GroupId; 

RoleGroupEntityが複合キーを持っています

@Entity 
@Table(name = "role_group") 
public class RoleGroupEntity implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @EmbeddedId 
    private RoleGroupCompositeKey posRGKey; 

    @MapsId("role_id") 
    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "role_id") 
    private RoleEntity roles; 

    @MapsId("group_id") 
    @ManyToOne 
    @JoinColumn(name = "group_id") 
    private GroupEntity GroupId; 

選択クエリを機能させる方法をご存知ですか?あなたが使用する必要がjoincolumn使用することはできません

+0

をメッセージが言うようにRoleGroupEntityにはプロパティ「ROLE_ID」はありません。 JPQLでは、フィールド名/プロパティ名ではなく列名を使用します。 JPQL!= SQL –

答えて

1

u.roles.id LIKE :role_id")

@NamedQuery(name = "GroupEntity.getGIDs", query = "SELECT o FROM RoleGroupEntity u JOIN FETCH u.GroupId o WHERE u.roles.id LIKE :role_id") 
+0

残念ながら私は 'QueryException:クエリで指定された結合フェッチが見つかりましたが、フェッチされた関連付けの所有者が選択リストに存在しませんでした[FromElement {明示的ではなく、コレクション結合、フェッチ結合、非遅延プロパティの取得} –

+0

'join fetch'の代わりに' inner join'を使います – Jens

+0

JOIN FETCHをちょうどJOINに変更して、あなたのselectを使いました。これはうまくいきました。 –

関連する問題