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