2015-05-12 16 views
6

Ich habe eine Tabelle, die auf Insertionsreihenfolge basiert (falsches Legacy-Design, das ich nicht ändern kann) und transient Entitäten in der falschen Reihenfolge eingefügt hat. Die fragliche Tabelle heißt "Mean", was eine Kind-Entität von "Belief" ist. Wenn session.save(belief); aufgerufen wird, wird die Aktion an die untergeordneten Entitäten untergeordnet, die als Liste in der Glaubensklasse gespeichert ist. Die Mean-Entitäten werden in der entsprechenden Reihenfolge in der Liste "view.getMeans()" gespeichert, aber sobald sie in der Datenbank beibehalten wurden, werden sie in der Reihenfolge ihres zusammengesetzten Schlüssels eingefügt. so zum Beispiel, wenn es 3 Mittlere Einheiten mit der folgenden Reihenfolge und zusammengesetzten Schlüsseln eingefügt werden:Hibernate führt falsche Reihenfolge für untergeordnete Entitäten mit zusammengesetzten Schlüsseln aus

[1, 1], [1, 3], [1, 2] 

Sie werden wie so durch die zusammengesetzten Schlüssel bestellt eingefügt:

[1, 1], [1, 2], [1, 3] 

Jede Idee, wie was könnte das verursachen? Ich dachte, Hibernate sollte in der Reihenfolge einfügen, in der sie in der Liste erscheinen? Ich habe sogar versucht, session.save() auf jedem Mean-Objekt einzeln auszuführen, um zu sehen, ob das einen Unterschied machen würde, aber das tat es nicht.

Ich schätze Ihre Hilfe!

EDIT: Also was ich getan habe, war das Hinzufügen einer neuen Spalte zu der Mean-Tabelle namens col_index, die den Spaltenindex des Mean in der resultierenden Matrix enthält. Ich habe die Annotation javax.persistence.OrderBy mit der neuen Spalte col_index verwendet, sodass die List of Mean-Entitäten in der entsprechenden Reihenfolge zurückkommt. Das behebt das Problem mit dem Einfügeauftrag jedoch immer noch nicht, und ich möchte immer noch eine Antwort dafür haben. Für den Moment muss diese Lösung jedoch ausreichen.

+0

Darf ich wissen, wie die Reihenfolge der Anzeigen zuverlässig ist/Auswirkungen auf einen Tisch hat? – kondu

+0

Die Reihenfolge, in der die mittleren Entitäten eingefügt werden, bestimmt auch den Spaltenindex für den Mittelwert in der resultierenden Matrix. Wenn zwei Entitäten eingeschaltet sind (wie im Beispiel), werden diese Spalten umgeschaltet. –

+0

Bitte beachten [this] (http://stackoverflow.com/questions/921442/row-insertion-order-entity-framework) Es könnte hilfreich sein - nicht die Antwort, die Frage gibt an, dass er nach jedem Einfügen lieber eine Sicherung verwendet hat als eine Transaktion, um die Reihenfolge zu erhalten – kondu

Antwort

0

Wenn Sie die Annotation Hibernate verwenden, können Sie die Annotation @OrderBy ("") verwenden, um die Reihenfolge Ihrer untergeordneten Entitäten anzugeben. Bitte beachten Sie this.

Möglicherweise sollten Sie eine separate Eigenschaft verwenden, um die Sortierung anzupassen und verwenden Sie die Eigenschaft in der @OrderBy.

+0

So erklärt, warum es auf dem Primärschlüssel bestellt, weil es die Standardeinstellung ist. Aber wie konnte es durch die ursprüngliche Reihenfolge geordnet werden? Ich sehe diese Option in diesen Dokumenten nicht. –

1

Ich denke, Sie sollten @OrderColumn und nicht @OrderBy verwenden.

Die Annotation @OrderBy wird beim Abrufen von Auflistungselementen verwendet, die Reihenfolge wird jedoch nicht von Hibernate verwaltet.

Die @OrderColumn allows Hibernate, um den Auflistungsindex des Elements in der Spalte mit der angegebenen Reihenfolge beizubehalten, die dann beim Abrufen der Sammlung verwendet wird.

Verwandte Themen