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

JPA/JPQL - Many-to-many relation - OrderBy doesn't work

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

@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.hibernate.annotations.OrderBy 没有运气。

谢谢!

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

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