选择用户名和角色名称
问题描述:
由于标题指示我试图通过使用以下查询来选择用户名和角色名称。选择用户名和角色名称
select u.username, r.name
from users u, role r
inner join users_roles ur
on ur.user_id = u.id
where username = ?;
但是我提示以下错误:
[2017-04-05 21:34:49] [42P01] ERROR: invalid reference to FROM-clause entry for table "u"
[2017-04-05 21:34:49] Hint: There is an entry for table "u", but it cannot be referenced from this part of the query.
[2017-04-05 21:34:49] Position: 79
我的用户实体如下
@Entity(name = "users") // Postgres doesn't like the table name "user"
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String username;
...
@ManyToMany
@JoinTable(
name = "users_roles",
joinColumns = @JoinColumn(
name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(
name = "role_id", referencedColumnName = "id"))
private Collection<Role> roles;
...
而且我的角色实体如下
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
@ManyToMany(mappedBy = "roles")
private Collection<User> users;
...
任何关于我在做什么的线索NG?
答
SELECT users.username, role.name
FROM users
LEFT OUTER JOIN users_roles
ON users.id = users_roles.user_id
LEFT OUTER JOIN role
ON users_roles.role_id = role.id
WHERE username = ?
请在此答案中添加一些上下文。这个查询做了什么?这是如何解决原始问题的? –
查询将返回第一列是用户名的元组列表,第二列是角色的名称。我将这与弹簧安全一起使用。 – user672009