Domanda

Ho un elenco di oggetti e ogni oggetto nell'elenco ha una posizione che non può cambiare se non esplicitamente modificato, in altre parole, gli oggetti sono in coda. Quale raccolta devo usare nella mia classe di entità per archiviare questi oggetti e come deve essere annotata quella raccolta?

Al momento ho questo

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

Se ciò non è possibile solo con JPA, sto usando EclipseLink come mio fornitore JPA, quindi le annotazioni specifiche di EclipseLink andranno bene se nient'altro aiuta.

EDIT: nota la gente, il problema non è che Java non preserverebbe l'ordine, lo so la maggior parte delle raccolte, il problema è che non conosco un modo intelligente per JPA di preservare l'ordine. Avere un ID ordine e fare l'ordine di query da esso è possibile, ma nel mio caso mantenere l'ID ordine è laborioso (perché l'interfaccia utente consente il riordino degli articoli) e sto cercando un modo più intelligente per farlo.

È stato utile?

Soluzione

Se vuoi che questo sia ordinato dopo il round-trip su SQL, dovresti fornire una sorta di ID di ordinamento all'interno dell'entità stessa - SQL è naturalmente orientato ai set piuttosto che alla lista. Puoi quindi ordinare dopo averli recuperati oppure assicurarti che la tua query specifichi anche l'ordinamento.

Se dai all'entità un ID intero generato automaticamente questo potrebbe funzionare, ma non vorrei garantirlo.

Altri suggerimenti

Usa un ID di ordinamento, come suggerito Jon, quindi aggiungi un'annotazione @OrderBy sotto @OneToMany. Ciò ordinerà qualsiasi query in base al campo specificato.

Ad esempio, se aggiungi un nuovo campo chiamato " sortId " a Bar, Foo sarebbe simile a questo:

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

Puoi

  1. Ordina un elenco prima della creazione
  2. Ordina un elenco dopo la creazione
  3. Utilizza una raccolta che esegue un ordinamento all'inserzione. TreeMap, TreeSet

Un elenco collegato implementa l'interfaccia Coda in Java e ti consente di aggiungere cose nel mezzo ...

TBH la maggior parte delle collezioni sono ordinate, non sono ...

Controlla i documenti, la maggior parte dice se sono ordinati o meno.

Vale la pena provare LinkedList invece di ArrayList, tuttavia, come ha detto Jon, è necessario trovare un modo per mantenere le informazioni sull'ordine.

Probabilmente una soluzione comporterà l'emissione di un numero d'ordine per ogni voce e la sua memorizzazione come SortedMap, durante la conversione in Elenco, se Elenco è quello che ti serve.

Tuttavia, ORM potrebbe essere potenzialmente abbastanza intelligente da fare tutte le conversioni per te se hai archiviato la raccolta come LinkedList.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top