2016-07-07 42 views
1

我需要獲得已在RoleGroupEntity表中分配了特定角色的GroupEntity對象。命名查詢加入選擇

我嘗試做這樣的:

@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; 

你知道如何使我的選擇查詢工作嗎?

+0

有一個在RoleGroupEntity沒有財產「ROLE_ID」的消息稱。 JPQL使用字段/屬性名稱而不是列名。 JPQL!= SQL –

回答

1

你不能使用你必須使用joincolumn: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

使用'inner join'而不是'join fetch' – Jens

+0

我將JOIN FETCH更改爲JOIN,並使用了你的選擇,它運行良好,所以非常感謝你們。 –