我有一个用户和一个角色类:
@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没有运气。
谢谢!
答案 0 :(得分:2)
注释OrderBy对JPQL没有任何影响。如果要查询用户并通过JPQL按角色名对它们进行排序,可以使用JPQL中的join:
SELECT u FROM User u join u.roles r ORDER BY r.name ASC