【问题标题】:ManyToMany HQL Join - Path expected for joinManyToMany HQL Join - 连接的预期路径
【发布时间】:2016-06-23 13:10:28
【问题描述】:

我有以下实体:

1.用户实体。

 @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}
  1. 角色实体。

    @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
    }
    

现在,我正在尝试在存储库中提取用户(用户名)及其角色(角色名称)。我希望为 Spring Security Auth 执行此操作。 这是我的 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]

我尝试了多种类型的连接,但得到了相同的结果。 谁能帮我提点建议?

谢谢!

【问题讨论】:

    标签: java hibernate jpa spring-data-jpa


    【解决方案1】:

    任何基本的JPQL 教程都会告诉你加入一个关系。

    select u.username, r.name from User u JOIN u.roles r WHERE u.username =:username
    

    【讨论】:

    • 谢谢。这是我的错误,我遵循了一个错误的例子! :)
    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2013-04-21
    • 2020-05-02
    相关资源
    最近更新 更多