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
我有一个用户和一个角色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