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

时间:2017-10-24 07:54:15

标签: hibernate jpa spring-data-jpa mariadb jpql

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

@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没有运气。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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