Учитывая представление таблиц базы данных, где два объекта соединены через объединяющую таблицу, действительно ли это возможно к виду на другом объекте, указывающем порядок сортировки так или иначе через аннотации?
Рассмотрите, примерно, следующие таблицы базы данных:
actor ( id, name )
credit ( actorId, movieId, roleName )
movie ( id, title, year )
И будьте в спящем режиме объекты как:
@Entity
class Actor {
@Id
Integer id;
@Column
String name;
@OneToMany
@JoinColumn(name = "actorId")
List<Credit> credits;
}
@Entity
class Credit {
@Column
String roleName;
@ManyToOne
@JoinColumn(name = "movieId")
Movie movie;
}
@Entity
class Movie {
@Id
Integer id;
@Column
Integer year;
@Column
String title;
}
Таким образом, я хотел бы смочь иметь Кредиты возврата порядка сортировки по умолчанию на Агента в порядке убывания к году фильма:
actor.getCredits(); // Returns credits in order of Credit.movie.year
Кажется, что один уровень глубоко присоединения довольно прост к виду при помощи @OrderBy, например, @OrderBy ("roleName")..., но как я иду другое соединение глубже?
Спасибо!
В соответствии со спецификацией JPA:
Имя свойства или поля должно соответствовать постоянному свойству или полю связанного с ним класса
Это объясняет, почему @OrderBy("фильм". year") работает не так, как ожидалось
Если вы не используете запрос HQL, вы должны использовать инкапсуляцию, чтобы получить свою цель
@Entity
public class Actor {
private List<Credits> credits = new ArrayList<Credits>();
@OneToMany
@JoinColumn(name="ACTOR_ID")
public List<Credits> getCredits() {
return this.credits;
}
@Transient
public List<Credits> getCreditsOrderedByMovieYear() {
Collections.sort(credits, new Comparator<Credits>() {
public int compare(Credits o1, Credits o2) {
// Integer implements Comparable<T>
return o1.getMovie().getYear().compareTo(o2.getMovie().getYear());
}
});
return credits;
}
}
Иногда, когда Hibernate не обеспечивает некоторого пользовательского поведения, я использую инкапсуляцию, чтобы получить свою цель
regards,
.Вы также можете добиться этого при времени запроса, используя предложение по порядку, как показано здесь : http://docs.jboss.org/hibernate/core/3.3/reference/ru/html/queryhql.html#queryhql-ordering