Как составить JPQL-запрос для получение отсортированного списка сущностей из другой сущности, с которой есть связь ManyToMany?
Есть две сущности:
@Entity
public class A {
@Id
Integer id;
@ManyToMany
@JoinTable(
name = "a_b",
joinColumns = @JoinColumn(name = "a_id"),
inverseJoinColumns = @JoinColumn(name = "b_id")
)
@OrderBy("name")
Set<B> bs;
}
@Entity
public class B {
@Id
Integer id;
String name;
}
Я хочу получить список сущностей B, которые привязаны к сущности A. Вообще, обычно это делается довольно легко:
SELECT a.bs FROM A a WHERE a.id=:id
но проблема в том, что мне ещё нужна сортировка сущностей B в списке результатов. Вот такой код работать не будет:
SELECT a.bs FROM A a WHERE a.id=:id ORDER BY a.bs.name ASC
потому что нельзя получить свойство сущности при обращении к списку сущностей (единственное доступное свойство у a.bs - это size). Проблема осложняется ещё и тем, что в классе B нет поля A, а поэтому я не могу сделать вот так:
SELECT b FROM B b WHERE b.a.id=:id
Итак. Надо получить отсортированный список сущностей B по id сущности A. Я составил такой JPQL-запрос:
SELECT a.bs AS b FROM A a WHERE a.id=:id ORDER BY b.name ASC
Но при компиляции возникает ошибка:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'b.name'
хотя при редактировании кода IDEA ошибок не показывала.
Как мне следует изменить запрос, чтобы получить отсортированный список сущностей B?
Ответы (1 шт):
Мою задачу решает предложенный @Sergey Mitrofanov запрос:
SELECT b FROM A a JOIN a.bs b WHERE a.id=:id ORDER BY b.name