Frage

Ich habe eine Liste von Objekten und jedes einzelne Objekt in der Liste um eine Position haben, die, wenn nicht explizit, also geändert möglicherweise nicht ändern, werden die Objekte in einer Warteschlange. Welche Sammlung soll ich in meinen Entitätsklasse diese Objekte zu speichern und wie diese Sammlung mit Anmerkungen versehen werden soll?

Im Moment habe ich diese

@Entity
class Foo {
  ...
  @OneToMany(mappedBy = "foo", cascade = CascadeType.ALL)
  List<Bar> bars = new ArrayList<Bar>();
  ...
}

Wenn diese mit JPA rein nicht möglich ist, ich bin mit Eclipse als meine JPA-Provider, so Eclipse spezifische Anmerkungen werden in Ordnung, wenn es hilft nichts anderes.

EDIT: Hinweis Menschen, das Problem ist nicht, dass Java würde den Auftrag nicht PrESErV, ich weiß, die meisten Sammlungen zu tun, ist das Problem, dass ich nicht weiß, eine intelligente Art und Weise für JPA, um die Bestellung PrESErV. einen Auftrag ID und machen Sie die Abfrage, um zu haben, indem es möglich ist, aber in meinem Fall die Reihenfolge ID Aufrechterhaltung ist umständlich (da die Benutzeroberfläche ermöglicht Umordnung der Elemente), und ich bin auf der Suche für eine intelligentere Art und Weise, es zu tun.

War es hilfreich?

Lösung

Wenn Sie wollen, dass diese auf SQL nach Round-Tripping bestellt werden, sollten Sie eine Art von ID innerhalb der sich Unternehmen Bestellung liefern - SQL ist natürlich gesetzt orientiert anstatt Liste orientiert. Sie können dann entweder sortieren, nachdem Sie holen sie zurück, oder stellen Sie sicher, Ihre Anfrage zu den Bestell angibt.

Wenn Sie geben dem Unternehmen eine automatisch generierte integer ID dieses Macht Arbeit, aber ich würde es nicht garantieren wollen.

Andere Tipps

eine Sortierreihenfolge-ID verwenden, wie Jon vorgeschlagen, fügen Sie dann eine @OrderBy Anmerkung unter dem @OneToMany. Dadurch wird jede Abfrage durch das angegebene Feld bestellen.

Als Beispiel, wenn Sie ein neues Feld namens „SortID“ zu Bar hinzufügen, Foo würden wie folgt aussehen:

@Entity
class Foo {
  ...
  @OneToMany(mappedBy = "foo", cascade = CascadeType.ALL)
  @OrderBy("sortId ASC")
  List bars = new ArrayList();
  ...
}

Sie können

  1. Sortieren einer Liste vor der Schöpfung
  2. Sortieren einer Liste nach der Erstellung
  3. Verwenden Sie eine Sammlung, die eine Art auf dem Einsatz führt. TreeMap, TreeSet

Eine verkettete Liste implementiert die Queue inteface in Java und ermöglicht es Ihnen, die Dinge in der Mitte hinzufügen ...

TBH die meisten der Sammlungen bestellt werden, sind sie nicht ...

Sie die Dokumentation prüfen, die meisten sagen, ob oder ob nicht sie bestellt werden.

Es ist ein Versuch wert, LinkedList statt Arraylist, aber, wie Jon sagte, müssen Sie einen Weg von persistierenden die Auftragsinformationen finden.

Es wird eine Lösung wahrscheinlich eine Auftragsnummer zu jedem Eintrag beinhaltet die Ausstellung ein es als SortedMap speichern, wenn sie in die Liste konvertieren, wenn Liste ist, dass Sie benötigen.

Allerdings ORM könnte möglicherweise klug genug sein, um alle Konvertierungen für Sie tun, wenn Sie die Sammlung als LinkedList gespeichert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top