Cosa e quando è lo scenario migliore per utilizzare l'annotazione DiscriminatorValue in modalità di sospensione?Quando utilizzare l'annotazione DiscriminatorValue in modalità di sospensione
risposta
Questi 2 collegamenti aiutarmi a capire il concetto di ereditarietà più:
http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html
http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?page=6
Per comprendere discriminatore, prima è necessario comprendere le strategie di successione: SINGLE_TABLE, CAUSE, TABLE_PER_CLASS.
Il discriminatore viene comunemente utilizzato nell'ereditarietà SINGLE_TABLE perché è necessaria una colonna per identificare il tipo di record.
Esempio: si dispone di una classe Studente e 2 sottoclassi: GoodStudent e BadStudent. Sia i dati Good che BadStudent verranno archiviati in 1 tabella, ma ovviamente è necessario conoscere il tipo e questo è quando DiscriminatorColumn entrerà. Vedere i collegamenti che ho postato sopra.
Quando si ha un'ereditarietà di entità utilizzando la strategia a tabella singola e si desidera che il valore della colonna discriminatore sia qualcosa di diverso dal nome della classe della classe concreta dell'entità o quando il tipo della colonna discriminatore sia non STRING.
Questo è spiegato, con un esempio, in the javadoc.
Ecco la spiegazione e un esempio su tavola di ibernazione per gerarchia di classi, si consideri che abbiamo classe base denominata pagamento e 2 classi derivate come Carta di Credito, Check
Se salviamo l'oggetto classe derivata come Carta di Credito o Controllare quindi automaticamente Anche l'oggetto della classe di pagamento verrà salvato nel database e nel database tutti i dati verranno archiviati in una sola tabella, che è sicuramente la tabella delle classi di base.
Ma qui dobbiamo utilizzare una colonna di discriminazione aggiuntiva nel database, solo per identificare quale oggetto di classe derivata è stato salvato nella tabella insieme all'oggetto classe di base, se non stiamo usando questa colonna di sospensione verrà lanciata l'eccezione
Lascia che ti spieghi un esempio. Supponiamo che tu abbia una classe chiamata Animali e sotto la classe Animali ci siano molte sottoclassi come Rettile, Uccello ... ecc.
E nel database avete tabella chiamata ANIMAL
---------------------------
ID||NAME ||TYPE ||
---------------------------
1 ||Crocodile ||REPTILE ||
---------------------------
2 ||Dinosaur ||REPTILE ||
---------------------------
3 ||Lizard ||REPTILE ||
---------------------------
4 ||Owl ||BIRD ||
---------------------------
5 ||parrot ||BIRD ||
---------------------------
Qui la colonna TYPE
si chiama DiscriminatorColumn, perché questa colonna contiene i dati che separa chiaramente rettili e uccelli. E i dati REPTILE
e BIRD
nella colonna TYPE
sono il DiscriminatorValue.
Così nella parte java tale struttura sarà simile:
Animal classe:
@Getter
@Setter
@Table(name = "ANIMAL")
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = "TYPE")
public class Animal {
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String name;
}
classe Rettile: classe
@Entity
@DiscriminatorValue("REPTILE")
public class Reptile extends Animal {
}
Uccello:
@Entity
@DiscriminatorValue("BIRD")
public class Bird extends Animal {
}
- 1. quando utilizzare i criteri separati in modalità di sospensione?
- 2. Quando il dispositivo Android entra in modalità di sospensione?
- 3. Esecuzione di app IPhone in modalità Sospensione
- 4. Evita che l'iphone vada in modalità sospensione
- 5. Funzione non supportata dalla modalità di sospensione
- 6. Esiste la modalità di sospensione fluido?
- 7. quando utilizzare il caricamento Lazy/caricamento Eager in sospensione?
- 8. Come impedire SQL Injection in modalità di sospensione?
- 9. C'è qualche API Win32 per attivare la modalità di sospensione o sospensione in Windows?
- 10. Come utilizzare il database come backup/failover in modalità di sospensione?
- 11. Come utilizzare la sequenza Oracle esistente per generare l'id in modalità di sospensione?
- 12. Imposta la modalità flush della sessione di sospensione in primavera
- 13. Come gestisco con garbo le modalità sospensione/sospensione in un'applicazione winforms?
- 14. Come ottenere il DiscriminatorValue in fase di esecuzione
- 15. Come simulare la modalità di sospensione sull'emulatore Android
- 16. Avvio di un'applicazione quando Windows si riattiva dalla modalità di sospensione
- 17. Cosa succede alle Attività/servizi quando il telefono va in modalità sospensione/standby?
- 18. Come arrestare un timer durante la modalità di sospensione/sospensione nell'applicazione Win C#?
- 19. Che cos'è l'effetto di aliasing dei dati in modalità di sospensione?
- 20. Data Java Sospensione sospensione
- 21. Quando utilizzare i puntini di sospensione dopo le voci di menu
- 22. Come utilizzare la sottoquery nella clausola "from" in sospensione?
- 23. Sospensione di subquery distaccataCriteria
- 24. Come verificare se la sessione ha già aperto la transazione o no in modalità di sospensione?
- 25. Come restituire il tipo di oggetto anziché l'elenco <Object[]> in modalità di sospensione?
- 26. Utilizzare EventLogReader in modalità Ordine Desc.?
- 27. Come utilizzare PyCharm in modalità 32 bit
- 28. Come utilizzare Android ProgressBar in modalità determinata?
- 29. Come utilizzare Tika in modalità server
- 30. Proiezioni di sospensione complesse
Avete provato a passare attraverso la documentazione, ca n consulta http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e1168 e http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html /inheritance.html#inheritance-tablepersubclass-discriminator –