У меня есть несколько сущностей-сущностей с наборами других объектов в качестве атрибутов. Я хочу сортировать их и гарантировать, что при каждой вставке они будут отсортированы. Я попробовал этот путь:Как сортировать объекты JPA с помощью TreeSet
@Entity
@Table(name = "Document")
public class Document implements Serializable, Comparable<Document> {
...
@ManyToOne
private Project relativeProject;
...
@Override
public int compareTo(Document d) {
long data1 = getDate().getTimeInMillis();
long data2 = d.getDate().getTimeInMillis();
if(data1 > data2)
return 1;
else
if(data2 < data1)
return -1;
else
return 0;
}
@Override
public boolean equals(Object d) {
return (getIdDocument() == ((Document)d).getIdDocument());
}
@Override
public int hashCode() {
return Long.valueOf(getIdDocument()).hashCode();
}
}
@Entity
@Table(name="Project")
public class Project implements Serializable, Comparable<Project> {
...
@OneToMany(mappedBy="relativeProject", fetch = FetchType.EAGER)
@Sort(type = SortType.NATURAL)
private SortedSet<Document> formedByDocuments;
public Progetto() {
this.formedByDocuments = new TreeSet<Document>();
}
...
}
Но это не работает. Проблема в том, что даже если в базе данных есть все необходимые записи, когда сеансовый компонент возвращает Project
, пропустит около Document
. Более того, записи не сортируются вообще в базе данных.
Если я вообще не сортирую (используя HashSet
) и переиздаю проект, все работает отлично, и я получаю все элементы в наборе (но не отсортированные, конечно).
Может кто-нибудь помочь мне узнать, что случилось с моей сортировкой?
Небольшое примечание, но вы можете использовать английские имена в своем коде. Это значительно облегчает обмен вашим кодом с другими (например, здесь). Когда я читаю такие вещи, как «progettoRelativo», это похоже на то, что вы запутали код. Вы могли бы также поставить «jkgdklgflkg». Я думаю, что многие другие чувствуют то же самое, и это может снизить ваши шансы получить хорошие ответы. –
Извините, я знаю. Я думал, что все еще ясно (Documento -> Document, Progetto -> Project), но я не думал, что есть и более сложные слова. – Simon
Отправьте свой метод equals() и hashCode() для документа, а также – Andre