¿Cómo puedo configurar las asignaciones de herencia de Hibernate utilizando anotaciones Java? ¿Cuáles son las ventajas de usar herencia en Anotaciones?Herencia en Hibernate ¿Anotaciones?
Respuesta
Esta es una pregunta muy general, pero te aconsejo echar un vistazo a los siguientes recursos:
- The documentation on how inheritance is declared via Hibernate annotations.
- This PDF file (capítulo 2 del libro sobre Hibernate). Página 38 reenvía ofertas con anotaciones de Hibernate.
Pero la respuesta muy básica a su pregunta es que usted debe utilizar la anotación @Inheritance
, así:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable {
...
}
Sí porque estudio para aprenderlo. Soy extraño este tema. Mi cebolla es mixta Así que gracias por los recursos. – stical
se recomienda usar la anotación @Inheritance sobre el @MappedSuperclass. Hemos tenido problemas en el pasado con @MappedSuperclass siendo lo suficientemente flexible para nuestras necesidades de mantenimiento continuo.
Matt, podría sugerirnos cuáles fueron los problemas con MappedSuperClass, ya que lo hemos usado extensamente en nuestra aplicación. – Achow
3 tipos posibles:
1. mesa individual por la estrategia de la jerarquía de clases:
@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>
- Pros: simples. No SE REQUIERE UNIONES (JOIN)
- Contras: No se pueden usar valores nulos. El número de columnas aumenta con la profundidad del gráfico Objeto.
2. Usuario estrategia subclase:
Tablas de base
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;
}
módulo de prueba
TestSubClass sub = new TestSubClass("sub1");
sub.setSupName("supersuper"); session1.save(sub);
SQL generado
Hibernate: insert into SUPER_TABLE (sup_name, id_col) values (?, ?)
Hibernate: insert into SUB_TABLE (sub_name, SUP_ID) values (?, ?)
- Pros: Estructuras de datos normalizadas.
- Contras: LAS INSCRIPCIONES siempre son requeridas.
3. estrategia de tabla por clase 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>
módulo de prueba
CreditCardPayment credit = new CreditCardPayment("C",1.0);
session1.save(credit);
SQL generado
Hibernate: insert into CREDIT_CARD (amount, creditCardType, payment_id) values (?, ?, ?)
También hay un @MappedSuperclass que hemos utilizado en o tu aplicación
- 1. Mapeo herencia de varios niveles en Hibernate con anotaciones
- 2. anotaciones y herencia de javax.persistence
- 3. Interceptores Hibernate con anotaciones
- 4. Herencia incrustable Hibernate
- 5. Hibernate Enum mapping utilizando anotaciones
- 6. Columna múltiple Unir en Hibernate/JPA Anotaciones
- 7. Hibernate: ¿diferencia entre anotaciones y anotaciones de commons?
- 8. Mapeo herencia de varios niveles en Hibernate
- 9. Migración de Hibernate a JPA sin anotaciones
- 10. Hibernate: asignación de archivos o anotaciones?
- 11. Conversión de hibernate hbm.xml a anotaciones
- 12. Hibernate: javax.naming.NoInitialContextException (asignación de componentes mediante anotaciones)
- 13. usando Hibernate UUIDGenerator a través de anotaciones
- 14. Hibernate @Id a través de la herencia
- 15. Mapeo de herencia con JPA/Hibernate
- 16. Hibernate: org.hibernate.WrongClassException, la herencia SINGLE_TABLE y DiscriminatorFormula
- 17. ¿Están Hibernate denominadas consultas HQL (en anotaciones) optimizadas?
- 18. hibernate: create Entity (con anotaciones) en tiempo de ejecución
- 19. El misterio de la herencia de Java EE 6 anotaciones
- 20. Por qué @OneToMany no funciona con herencia en Hibernate
- 21. Hibernate (APP) mapeo herencia de clases abstractas súper
- 22. asignar una lista de cadenas con JPA/Hibernate anotaciones
- 23. consulta con nombre desconocido - Anotaciones de Hibernate y
- 24. Asignación de tipos de enumeración con Anotaciones de Hibernate
- 25. hibernate usando anotaciones o usando archivos de configuración de hibernación
- 26. Escribir menos DAO con Spring Hibernate usando las anotaciones
- 27. ¿Utiliza anotaciones de primavera para aplicar automáticamente el interceptor Hibernate?
- 28. Java, Anotaciones de Hibernate, ¿Cómo agregar métodos al objeto POJO?
- 29. ¿Cómo anulo la estrategia GenerationType usando anotaciones de Hibernate/JPA?
- 30. Generación de esquemas de anotaciones de Maven + Hibernate
Su pregunta no tiene demasiado sentido.¿Puedes proporcionar más información sobre tu problema? – Zoman
@Zoman: si está buscando cómo usar inhertience con anotaciones en hibernación, esta pregunta es justo lo que necesita. Acabo de buscar en Google estas tres palabras clave y obtuve la respuesta aquí. – ripper234