Порядок критериев гибернации по столбцу связующей таблицы
У меня есть таблицы членства и персоны, которые связаны со связью manyToMany через таблицу person_membership. Таблица person_membership включает в себя person_id, members_id и sequence_number. Сущность "Членство" имеет следующий код для связи с таблицей лиц.
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "person_membership",
joinColumns = { @JoinColumn(name = "membership_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "person_id", nullable = false, updatable = false) }
)
public Set<Person> getPersons() {
return this.persons;
}
Получение членства осуществляется через критерии с использованием приведенного ниже кода:
Session session = getSession();
Criteria c = session.createCriteria(Membership.class, "membership");
c.add(Restrictions.eq("membershipNumber", membershipNumber));
return (Membership) c.uniqueResult();
То, что я хочу сделать, это отсортировать результат по person_membership.sequence_number. Как я могу сделать это, используя критерии или, может быть, есть другой способ сделать это?
Я после хорошего, чистого и не сложного пути, если это возможно:)
1 ответ
Если вы хотите упорядочить людей во время выборки, укажите столбец sequenceNumber, используя аннотацию JPA @OrderBy.
@OrderBy("sequenceNumber")
public Set<Person> getPersons() {
Если вы хотите упорядочить все членства по person_membership.sequence_number, а затем вернуть первый или отдельный результат в результате, как показано ниже.
HQL
select distinct m
from Membership m
join m.persons p
order by p.sequenceNumber;
критерии
Session session = getSession();
Criteria c = session.createCriteria(Membership.class, "membership");
c.createCriteria("membership.persons", "person");
c.add(Restrictions.eq("membershipNumber", membershipNumber));
c.addOrder(Order.asc("person.sequenceNumber"))
c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
return (Membership) c.uniqueResult();