gpt4 book ai didi

java - 如何为多对多关联编写 HQL 查询?

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:32 25 4
gpt4 key购买 nike

我有 3 个表,Role[roleId, roleName]Token[tokenID, tokenName]ROLETOKENASSOCIATION[roleId, tokenID]。第三个是由 hibernate 自动创建的。现在,如果我简单地编写一个查询来从 Role 类中获取所有对象,它会提供所有角色对象以及关联的 tokenID 和 tokenName。

我只是希望关联是单向的。即:角色--->代币所以 Role 类中的注释看起来像,

@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 的 tokenNames。首先我做了这样的查询 SELECT tkns.tokenName FROM Role WHERE Role.roleId=:roleId但是,我最终遇到了一些取消引用错误。

然后我将查询更改为 SELECT tkns FROM Role r WHERE r.roleId=:roleId现在我得到了我想要的。但它也带有 roleId。

我该如何获取 tokenName 本身?其实我的问题已经解决了,但是我想知道怎么做。

如果有人解释查询构造,这对我会有帮助。

任何建议!

最佳答案

你试过吗

SELECT t.tokenName FROM Role r JOIN r.tkns t WHERE r.roleId = :roleId

编辑: 这个查询几乎直接映射到相应的 SQL 查询,其中 Role r JOIN r.tkns t 是通过链接表 Role r JOIN ROLETOKENASSOCIATION rt ON r.roleId = rt.roleId JOIN Token ON rt.tokenId = t.tokenId. Affe 的回答是同一查询的另一种语法。

另请参阅:

关于java - 如何为多对多关联编写 HQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3816502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com