Подтвердить что ты не робот

Как вы заказываете таблицу oneToMany join в критериях спящего режима

Скажем, у меня есть класс Мать с отображением oneToMany для котят

@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@Table(name = "Mother")

.....

@OneToMany(fetch = FetchType.LAZY, targetEntity=Kittens.class, cascade=CascadeType.ALL)
@JoinColumn(name="motherId")
private List<Kittens> kittens;

Я использую критерии Api для предоставления списка

Criteria criteria = this.getSession().createCriteria(Mother.class);
Criterion MotherType = Restrictions.eq("type", "domesticated");
criteria.add(MotherType)
.addOrder(Order.asc("motherName"))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.setFetchMode("kittens", FetchMode.JOIN)
// .addOrder(Order.asc("kittens.kittenName"));
List test = criteria.list();

Работает нормально, пока я не попытаюсь добавить порядок поля котят kittenName

Я также попытался добавить аннотацию @OrderBy (value = "kittenName" ) под Kitten @OneToMany (... и т.д.), которая отлично работает до тех пор, пока вы не будете использовать API критериев, и этот порядок будет предшествовать любым другим инструкциям заказа в sql.

Приветствуем вас за любую помощь...

4b9b3361

Ответ 1

Вам нужно добавить аннотацию @javax.persistence.OrderBy в список kittens.

@OneToMany(fetch = FetchType.LAZY,
           targetEntity=Kittens.class,
           cascade=CascadeType.ALL)
@JoinColumn(name="motherId")
@OrderBy("kittenName")
private List<Kittens> kittens;

@See

Ответ 2

Не используйте @JoinColumn для использования @JoinTable, для запуска он создает 2 sql-оператора вместо одного (insert + update). Его не рекомендовали Hibernate.