Come è possibile configurare i mapping di ereditarietà di Hibernate utilizzando le annotazioni Java? Quali sono i vantaggi dell'utilizzo dell'ereditarietà in Annotazioni?Ereditarietà nelle annotazioni di ibernazione?
risposta
Questa è una domanda molto generale, ma vorrei consigliare di dare un'occhiata alle seguenti risorse:
- The documentation on how inheritance is declared via Hibernate annotations.
- This PDF file (capitolo 2 di un libro su Hibernate). Pagina 38 inoltra le trattative con le annotazioni di Hibernate.
Ma la risposta molto di base alla tua domanda è che si dovrebbe utilizzare il @Inheritance
annotazione, in questo modo:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable {
...
}
Sì perché studio per impararlo. Sono estraneo a questo argomento. La mia cipolla è mista. Quindi grazie per le risorse. – stical
Io suggerirei di usare l'annotazione @Inheritance sopra il @MappedSuperclass. Abbiamo avuto problemi in passato con @MappedSuperclass che è abbastanza flessibile per le nostre esigenze di manutenzione in corso.
Matt, potresti per favore suggerire quali sono stati i problemi con MappedSuperClass, dato che lo abbiamo ampiamente utilizzato nella nostra applicazione. – Achow
3 tipi possibili:
1. Tavolo unico per la strategia gerarchia di classe:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn( name="planetype",
discriminatorType=DiscriminatorType.STRING )
@DiscriminatorValue("Plane")
public class Plane { ... }
@Entity
@DiscriminatorValue("A320")
public class A320 extends Plane { ... }
<hibernate-mapping>
<subclass name="DomesticCat" extends="Cat" discriminator-value="D">
<property name="name" type="string"/>
</subclass>
- Pro: più semplici. Non sono richiesti JOIN
- Contro: Impossibile utilizzare valori null. Il numero di colonne aumenta con la profondità del grafico dell'oggetto.
2. strategia sottoclasse Registrato:
tabelle di database
CREATE TABLE SUPER_TABLE(
id_col number primary key,
sup_Name varchar2(20));
CREATE TABLE SUB_TABLE(
SUP_ID primary key,
sub_name varchar2(20),
constraint SUB_TABLE_fk foreign key (sup_Id) references super_table(id_col));
@Entity
@Table(name= "SUPER_TABLE")
@Inheritance(strategy= InheritanceType.JOINED)
public class TestSuperClass {
@Id
@GeneratedValue(
strategy=GenerationType.SEQUENCE,
generator="SEQ_GEN")
@SequenceGenerator(
name="SEQ_GEN",
sequenceName="hibernate_sequence"
)
@Column(name ="id_col")
private long idcol;
@Column(name ="sup_name")
private String supName;
@Entity
@Table(name="SUB_TABLE")
@PrimaryKeyJoinColumn(name="SUP_ID")
<class name="Payment" table="PAYMENT">
<id name="id" type="long" column="PAYMENT_ID">
<generator class="native"/>
</id>
<property name="amount" column="AMOUNT"/>
...
<joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
<key column="PAYMENT_ID"/>
<property name="creditCardType" column="CCTYPE"/>
...
</joined-subclass>
<joined-subclass name="CashPayment" table="CASH_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>
public class TestSubClass extends TestSuperClass{
private String sub_name;
}
Modulo Test
TestSubClass sub = new TestSubClass("sub1");
sub.setSupName("supersuper"); session1.save(sub);
SQL generato
Hibernate: insert into SUPER_TABLE (sup_name, id_col) values (?, ?)
Hibernate: insert into SUB_TABLE (sub_name, SUP_ID) values (?, ?)
- Pro: Strutture dati normalizzate.
- Contro: JOINS sono sempre reqd.
3. Tabella per la strategia classe concreta:
create table CREDIT_CARD(payment_id number primary key, amount
number, creditCardType varchar2(2));
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Payment {
@Id
@GeneratedValue(
strategy=GenerationType.SEQUENCE,
generator="SEQ_GEN")
@SequenceGenerator(
name="SEQ_GEN",
sequenceName="hibernate_sequence"
)
@Column(name = "payment_id")
private long id;
private double amount;
@Entity
@Table(name="CREDIT_CARD")
public class CreditCardPayment extends Payment {
private String creditCardType;
<class name="Payment">
<id name="id" type="long" column="PAYMENT_ID">
<generator class="sequence"/>
</id>
<property name="amount" column="AMOUNT"/>
...
<union-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
<property name="creditCardType" column="CCTYPE"/>
...
</union-subclass>
modulo di test
CreditCardPayment credit = new CreditCardPayment("C",1.0);
session1.save(credit);
SQL generato
Hibernate: insert into CREDIT_CARD (amount, creditCardType, payment_id) values (?, ?, ?)
C'è anche un @MappedSuperClass che abbiamo usato io no la tua domanda
- 1. Ibernazione: associazione di file o annotazioni?
- 2. Quali sono le dipendenze Maven per utilizzare le annotazioni di ibernazione, di ibernazione e ehcache?
- 3. inverse = true nelle annotazioni JPA
- 4. Ereditarietà nelle interfacce di raccolta java
- 5. Che cosa significa GA nelle versioni di ibernazione?
- 6. Pacchetto di mappatura di ibernazione
- 7. Fogli di stile specifici del controller nelle guide 3: Ereditarietà
- 8. Polimorfismo di ibernazione
- 9. ibernare uno a molti usando una tabella di join e le annotazioni di ibernazione
- 10. ibernare utilizzando annotazioni o utilizzando i file di configurazione di ibernazione
- 11. Come si esegue il mapping di una "mappa" in ibernazione utilizzando le annotazioni?
- 12. Come ruotare solo il testo nelle annotazioni in ggplot?
- 13. Il modo migliore per supportare "enumerazioni estendibili" nelle annotazioni?
- 14. Generazione schema di annotazioni Maven + Hibernate
- 15. Criteri di ibernazione: unione di una tabella senza associazione mappata
- 16. Genera bean di entità di ibernazione da XSD
- 17. Eredità di definizione di bean con annotazioni?
- 18. Inizializzazione ricorsiva di ibernazione
- 19. Modifica tipo PK nelle classi modello di Oracle db, generato con ibernazione
- 20. Nelle statistiche di ibernazione qual è la differenza tra caricamento e recupero
- 21. Enum "Ereditarietà"
- 22. Come utilizzare le annotazioni di validazione di Hibernate con enumerazioni?
- 23. Configurazione di ibernazione in runtime
- 24. vincolo database di gestione ibernazione
- 25. Espressioni nei criteri di ibernazione
- 26. conteggio (*) nei criteri di ibernazione?
- 27. Aggiornamento di ibernazione con EntityManager
- 28. Perché usiamo l'annotazione di ibernazione?
- 29. Prestazioni di ibernazione e JDBC?
- 30. Errore SQL nativo di ibernazione
La tua domanda non ha molto senso.Puoi fornire maggiori informazioni sul tuo problema? – Zoman
@Zoman - se stai cercando come usare l'ereditarietà con le annotazioni in ibernazione, questa domanda è proprio ciò di cui hai bisogno. Ho solo cercato su Google queste tre parole chiave e ho ottenuto la risposta qui. – ripper234