Jpa 选择用户名和角色名

Jpa 选择用户名和角色名,jpa,hql,Jpa,Hql,正如标题所示,我正试图使用以下查询选择用户名和角色名 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" [20

正如标题所示,我正试图使用以下查询选择用户名和角色名

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;
...
@Entity(name=“users”)//Postgres不喜欢表名“user”
公共类用户{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私有字符串用户名;
...
@许多
@可接合(
name=“用户\角色”,
joinColumns=@JoinColumn(
name=“user\u id”,referencedColumnName=“id”),
inverseJoinColumns=@JoinColumn(
name=“role\u id”,referencedColumnName=“id”))
私人收藏角色;
...
我的角色实体如下

@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;
...
@实体
公共阶级角色{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私有字符串名称;
@许多(mappedBy=“角色”)
私人收藏用户;
...

有关于我做错了什么的线索吗?

请在此答案中添加一些上下文。此查询的作用是什么?这如何解决原始问题?查询将返回一个元组列表,其中第一列是用户名,第二列是角色的名称。我正在与spring security结合使用。请为此answe添加一些上下文r、 这个查询是做什么的?它是如何解决原始问题的?查询将返回一个元组列表,其中第一列是用户名,第二列是角色的名称。我将它与spring security结合使用。
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 = ?