2010-12-08 7 views
8

Wir haben folgende JPA Klasse:Wie kann ich eine Auflistungseigenschaft in JPA dynamisch sortieren?

@Entity 
class Supplier { 
    // ... id property etc. 

    @OneToMany 
    @OrderBy("someProperty") 
    private List<Region> regions; 
} 

Dies funktioniert im Normalfall in Ordnung. Wir haben jedoch einige mehrsprachige Daten, in denen die Werte in Eigenschaften wie nameEn, nameDe, nameZh gespeichert sind. Die genaue zu verwendende Eigenschaft hängt vom angemeldeten Benutzer ab. Zum Beispiel sollte ein deutschsprachiger Benutzer die Regionen so sehen, als wäre er mit @OrderBy("nameDe") annotiert worden.

Wie kann ich das erreichen?

Ich bin mir bewusst, ich könnte die Sammlung in meinem Code sortieren, nachdem es geladen wurde, aber dies macht Paginierung der Ergebnisse ziemlich schwierig.

+2

Sie können das nicht in die Annotation einbetten, da die Annotationen bei der Erstellung der EntityManagerFactory für Ihre Persistenzeinheit einmal verarbeitet werden. Was Sie versuchen, ist ähnlich dem Erstellen einer dynamischen Abfrage. –

Antwort

4

Sie könnten sie in Java sortieren. Möglicherweise in einem Getter:

+0

Was ist, wenn Sie 1000 Objekte in der Sammlung haben und nur die ersten 10 nach einer Eigenschaft sortiert haben möchten. Dies in dbms tun wäre viel effizienter –

+0

@LaurynasTretjakovas Dann würden Sie einfach über die ersten 10 Elemente nach dem Sortieren iterieren. Nicht sicher, was Sie glauben macht, dass eine Datenbank effizienter wäre. –

+1

@ b1nary.atr0phy, weil die Datenbank einen Index verwenden kann, um die Elemente zu sortieren, und wenn Sie viele Datensätze haben, übertragen Sie am Ende mehr Daten, als Sie über die Leitung benötigen. –

Verwandte Themen