java如何为多对多关联编写HQL查询?
我有3个表,Role[roleId, roleName]
,Token[tokenID, tokenName]
&ROLETOKENASSOCIATION[roleId, tokenID]
。第三个是由hibernate自动创建的。现在,如果我只编写一个查询,从Role class means获取所有对象,它将提供所有角色对象以及相关联的tokenID&;标记名
我只是希望协会是单向的。i、 e:角色-->;代币 角色类中的注释如下所示:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int roleId;
private String roleName;
@ManyToMany
@JoinTable(name="ROLE_TOKEN_ASSOCIATION",
joinColumns={@JoinColumn(name="roleId")},
inverseJoinColumns={@JoinColumn(name="tokenID")})
private List<Token> tkns;
//Getters & Setters
现在我想要特定roleId的标记名。
首先我做了一个这样的查询SELECT tkns.tokenName FROM Role WHERE Role.roleId=:roleId
但是,我最终出现了一些解引用错误
然后我将查询更改为SELECT tkns FROM Role r WHERE r.roleId=:roleId
现在我得到了我想要的。但它也有roleId
我怎样才能得到这个名字呢? 实际上我的问题已经解决了,但我想知道怎么做
如果有人解释一下查询结构,对我会有帮助的
任何建议
# 1 楼答案
你试过了吗
EDIT:此查询几乎直接映射到相应的SQL查询,其中
Role r JOIN r.tkns t
是通过链接表Role r JOIN ROLETOKENASSOCIATION rt ON r.roleId = rt.roleId JOIN Token ON rt.tokenId = t.tokenId
进行SQL联接的简写语法。Affe的答案是同一查询的另一种语法另请参见:
# 2 楼答案
您只需要名称字段的标量列表吗?你应该能做到这样