私は属性として他のエンティティのセットを持つエンティティBeanをいくつか持っています。私はそれらを並べ替え、挿入するたびにソートされたままになることを保証したい。 私はこの方法で試してみました:TreeSetを使用してJPAエンティティを並べ替える方法
@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>();
}
...
}
をしかし、それは動作しません。問題は、たとえデータベースにすべての必要なエントリがあっても、セッションBeanがProject
を返したときには、Document
がいくつか欠けてしまうことです。さらに、エントリはデータベース内でまったくソートされません。
私は全く並べ替えずに(HashSet
を使用して)プロジェクトを再公開すると、すべて正常に動作し、セット内のすべての要素が取得されますが、ソートされません。
私の並べ替えで何が問題なのか誰かが助けてくれますか?
小さな発言ですが、あなたのコードで英語の名前を使用することができます。これにより、コードを他の人と共有するのがはるかに簡単になります(たとえばここ)。私が「progettoRelativo」のようなものを読むと、コードを難読化したようなものです。そこに「jkgdklgflkg」を置くこともできます。私は他の多くの人が同じように感じていると思います。これが良い答えを得るチャンスを減らすかもしれません。 –
申し訳ありませんが、私は知っています。私はそれがまだはっきりしていると思った(Documento - > Document、Progetto - > Project)が、もっと複雑な言葉があるとは思わなかった。 – Simon
ドキュメントのequals()メソッドとhashCode()メソッドも投稿してください。 – Andre