ManyToMany HQL Join - 加入的预期路径
ManyToMany HQL Join - Path expected for join
我有以下实体:
1.User实体。
@Entity
@Table(name = "USER")
public class User {
@Id
@GeneratedValue
private int userId;
@Column
private String username;
@Column
private String password;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "USER_ROLE", joinColumns={@JoinColumn(name="userId")}, inverseJoinColumns={@JoinColumn(name="roleId")})
private List<Role> roles;
//+setters and getters}
角色实体。
@Entity
@Table(name="ROLE")
public class Role {
@Id
@GeneratedValue
private long roleId;
@Column
private String name;
@ManyToMany(mappedBy="roles", fetch=FetchType.EAGER)
private List<User> users;
//+setters and getters
}
现在,我正尝试在存储库中提取用户(用户名)及其角色(role_name)。我希望为 Spring 安全授权执行此操作。
这是我的 HQL 代码:
@Query("select u.username, r.name from User u"+
" join User_Role ur on u.userId = ur.userId"+
" join Role r on ur.roleId = r.roleId"+
" where u.username =:username")
...我收到此错误:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select u.username, r.name from ro.app.mmapp.persistence.entity.User u join User_Role ur on u.userId = ur.userId join Role r on ur.roleId = r.roleId where u.username =:username]
我尝试了多种类型的连接,但得到的结果相同。
谁能帮我一些提示?
谢谢!
任何基础 JPQL
教程都会告诉您加入关系。
select u.username, r.name from User u JOIN u.roles r WHERE u.username =:username
我有以下实体:
1.User实体。
@Entity
@Table(name = "USER")
public class User {
@Id
@GeneratedValue
private int userId;
@Column
private String username;
@Column
private String password;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "USER_ROLE", joinColumns={@JoinColumn(name="userId")}, inverseJoinColumns={@JoinColumn(name="roleId")})
private List<Role> roles;
//+setters and getters}
角色实体。
@Entity @Table(name="ROLE") public class Role { @Id @GeneratedValue private long roleId; @Column private String name; @ManyToMany(mappedBy="roles", fetch=FetchType.EAGER) private List<User> users; //+setters and getters }
现在,我正尝试在存储库中提取用户(用户名)及其角色(role_name)。我希望为 Spring 安全授权执行此操作。 这是我的 HQL 代码:
@Query("select u.username, r.name from User u"+
" join User_Role ur on u.userId = ur.userId"+
" join Role r on ur.roleId = r.roleId"+
" where u.username =:username")
...我收到此错误:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select u.username, r.name from ro.app.mmapp.persistence.entity.User u join User_Role ur on u.userId = ur.userId join Role r on ur.roleId = r.roleId where u.username =:username]
我尝试了多种类型的连接,但得到的结果相同。 谁能帮我一些提示?
谢谢!
任何基础 JPQL
教程都会告诉您加入关系。
select u.username, r.name from User u JOIN u.roles r WHERE u.username =:username