java - ManyToMany HQL Join - 连接的预期路径

标签 java hibernate jpa spring-data-jpa

我有以下实体:

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}
  • 角色实体。

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

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

    谢谢!

    最佳答案

    任何基本的 JPQL 教程都会告诉您加入 ON A RELATION。

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

    关于java - ManyToMany HQL Join - 连接的预期路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37992648/

    相关文章:

    java - 更新和/或删除时违反 Hibernate H2 引用完整性约束

    spring - 如何在 JPA/hibernate 中为映射的实体/表配置模式名称

    java - JPA 投影获取结果但未将列与界面 View 中的方法匹配

    java - 设计模式,无需重新编译/重新链接即可覆盖方法

    java - 作为 JAR 文件的 Web 服务,或另一个 WAR 中的 WAR?

    hibernate - 使用Spring data jpa批量更新

    mysql - 将 HQL 与 MySQL 结合使用,如何在分组依据之前对结果集进行排序,以便选择正确的记录?

    java - 使用 Spring Data 通过实体 ID 从实体获取嵌入式对象

    Java:将 BigInteger 除以 3/Base 3 表示

    java - 如何在运行时编译和部署 java 类?