Esiste un modello stabilito per associare una voce del database a una classe Java che viene eseguita su tali dati?

0

Ho un albero dei comportamenti con diversi nodi foglia che eseguono compiti. Quando si costruisce la relazione dell'albero nel database ho bisogno di un'associazione tra la voce del nodo foglia e la classe Java che eseguirà effettivamente l'esecuzione dell'attività. Ho visto alcuni esempi che memorizzano il nome canonico della classe di attività Java con i dati del nodo foglia e quindi istanziano la classe in fase di runtime utilizzando reflection. Non sono sicuro che mi piaccia questo approccio, ma sto cercando tutte le alternative per poter prendere una decisione informata.

    
posta 25.01.2015 - 21:04
fonte

1 risposta

0

Puoi usare JPA con ereditarietà.

Esistono diverse varianti ("pattern"):

  • tutti gli oggetti condividono la stessa tabella e c'è una colonna / attributo "discriminante" (questo è il più vicino a quello che spieghi). È veloce per le query, ma avrai una colonna per ogni attributo di una sottoclasse (se hai 20.000 istanze e solo due istanze di una sottoclasse che definisce l'attributo "x", avrai 20.000 righe dove l'attributo "x" è implementato come una colonna nulla ed è più difficile da applicare che, quando l'istanza è della sottoclasse data, l'attributo non può essere nullo (è necessario un vincolo programmato).

  • ogni sottoclasse ha una sottoclasse diversa (buona se le sottoclassi hanno molti attributi diversi, ma implica join quando si interrogano sul DB).

  • una tabella è usata per attributi comuni, ci sono tabelle per attributi specifici per sottoclassi (questo è un ibrido tra gli altri due).

Il vantaggio è che è standard, e ti dimentichi di come mantenere / recuperare i dati, l'APP già lo fa per te.

Il disavantage è che si tratta di un'API completa e dovresti imparare come gestisce le relazioni (inclusi il caricamento a cascata e / o il caricamento lazy), JPQL / Criteria, ecc.

    
risposta data 25.01.2015 - 21:10
fonte

Leggi altre domande sui tag