代码之家  ›  专栏  ›  技术社区  ›  Manu Zi

JPA/JPQL-多对多关系-OrderBy不起作用

  •  0
  • Manu Zi  · 技术社区  · 8 年前

    我有一个用户和一个角色类:

    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long id;
    
        @OrderBy("name")
        @ManyToMany(fetch=FetchType.EAGER)
        private SortedSet<Role> roles;
    }
    
    @Entity
    public class Role {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long id;
    
        private String name;
    }
    

    这将产生三个数据库表:

    User
    + id
    
    Role
    + id
    + name
    
    User_Role
    + users_id
    + roles_id
    

    现在我想通过JPQL查询用户并按角色名称对其排序:

    SELECT u FROM User u ORDER BY u.roles ASC
    

    我的数据库是MariaDB。遗憾的是,Hibernate生成以下本机无效查询:

    select us0_.id as id2_2_ from User us0_ cross join User_Role roles1_, Role role2_ where us0_.id=roles1_.users_id and roles1_.roles_id=role2_.id order by . ASC
    

    订购依据。ASC公司 显然不是有效的查询部分。我做错了什么?我还尝试了@OrderColumn和@org。冬眠注释。OrderBy运气不好。

    谢谢

    1 回复  |  直到 8 年前
        1
  •  2
  •   Yurii Kozachok    8 年前

    注释OrderBy对JPQL没有任何影响。如果要通过JPQL查询用户并按角色名称对其排序,可以在JPQL中使用join:

    SELECT u FROM User u join u.roles r ORDER BY r.name ASC