У меня есть объект Contact, связанный с объектом ContactList через отношение @OneToMany. Затем объект ContactList подключается к объекту списка просмотра через @ManyToOne. Сущность ContactList содержит данные, относящиеся к контакту в списке. Мне нужно отсортировать детей ContactList из Контакта по метке времени onOn в Списке отзывов. Я не уверен, что это возможно.
Контактное лицо
@OneToMany(mappedBy = "contact")
@OrderBy("created_on DESC") <-- This does not work.
private SortedSet<ContactList> contactLists;
объект ContactList:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "LIST_ID")
private ReviewList reviewList;
Сравнение списков контактов:
@Override
public int compareTo(ContactList b) {
if (this.getReviewList().getCreatedOn().getTime() == b.getReviewList().getCreatedOn().getTime()) {
log.error("Two review lists have the exact same created time???");
return 0;
}
return this.getReviewList().getCreatedOn().getTime() < b.getReviewList().getCreatedOn().getTime() ? -1 : 1;
}
Просмотр списка созданНа поле Я пытаюсь отсортировать родительский элемент по:
@Column(name="CREATED_ON", updatable=false)
private Timestamp createdOn;
Я пробовал без нотации @OrderBy, и он не скомпилируется. Но все, что я пытался вставить в цитату, терпит неудачу. Я пробовал contactList, как показано, reviewList, reviewList.createdOn, reviewList_createdOn и еще пару действительно глупых.
Похоже, что Hibernate берет первую часть строки в кавычках и помещает ее в запрос напрямую. Что бы я ни там вставил, ошибки с этим:
Вызвано: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: неизвестный столбец 'contactlis0_.created_on' в 'предложении заказа'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) ~ [na: 1.8.0_91]
at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) ~ [na: 1.8.0_91]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) ~ [na: 1.8.0_91]
в java.lang.reflect.Constructor.newInstance (Constructor.java:423) ~ [na: 1.8.0_91]
в com.mysql.jdbc.Util.handleNewInstance (Util.java:425) ~ [mysql-connector-java-5.1.44.jar: 5.1.44]
в com.mysql.jdbc.Util.getInstance (Util.java:408) ~ [mysql-connector-java-5.1.44.jar: 5.1.44]
в com.mysql.jdbc.SQLError.createSQLException (SQLError.java:943) ~ [mysql-connector-java-5.1.44.jar: 5.1.44]
И, конечно, так и есть, поскольку я пытаюсь сослаться на поле в другой таблице. Между ними нужно сделать что-то вроде JoinColumn.
Есть ли способ сделать это? Возможно, я мог бы написать собственный запрос JPQL, чтобы отсортировать их так, как я хочу, и передать его на страницу отдельно, но я пытался сделать это с помощью аннотации и спящего режима.