2017-04-05 174 views
0

由于标题指示我试图通过使用以下查询来选择用户名和角色名称。选择用户名和角色名称

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?

回答

0
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 = ? 
+0

请在此答案中添加一些上下文。这个查询做了什么?这是如何解决原始问题的? –

+0

查询将返回第一列是用户名的元组列表,第二列是角色的名称。我将这与弹簧安全一起使用。 – user672009