tomar la situación se señalan en esta pregunta: ¿Mapeo herencia de varios niveles en Hibernate con anotaciones
Mapping multi-Level inheritance in Hibernate
¿Cómo esta asignación se hará con anotaciones en lugar de un archivo de HBM?
tomar la situación se señalan en esta pregunta: ¿Mapeo herencia de varios niveles en Hibernate con anotaciones
Mapping multi-Level inheritance in Hibernate
¿Cómo esta asignación se hará con anotaciones en lugar de un archivo de HBM?
Específicamente, ¿qué estás teniendo problemas con ? jerarquía de clases de mapeo via joined subclasses es bastante sencillo:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class A implements Serializable { ... }
@Entity
public class B extends A { ... }
@Entity
@PrimaryKeyJoinColumn(name="A_ID")
public class C extends A { ... }
@Entity
@PrimaryKeyJoinColumn(name="B_ID")
public class D extends B { ... }
actualización (basado en el comentario de Michal).
En caso de que desee utilizar discriminadores (y usted debe tener una buena razón para hacerlo), es posible hacerlo mediante la mezcla de table-per-class-hierarchy strategy con secondary tables:
@Entity
@Table(name="A_table")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="entity_type")
@DiscriminatorValue("A")
public class A implements Serializable { ... }
@Entity
@SecondaryTable(name="B_table")
public class B extends A { ... }
@Entity
@SecondaryTable(name="C_table", pkJoinColumns={
@PrimaryKeyJoinColumn(name="A_ID", referencedColumnName="ID")
))
public class C extends A { ... }
@Entity
@SecondaryTable(name="D_table", pkJoinColumns={
@PrimaryKeyJoinColumn(name="B_ID", referencedColumnName="ID")
))
public class D extends B { ... }
La desventaja de este enfoque es que usted tendrá que especificar explícitamente la tabla para cada propiedad mapeada:
public class D extends B {
@Column(table="D_table")
private String someProperty;
...
}
Inheritance between @Entity annotated classes se recoge de forma automática. Entonces, si la clase A se anota y la clase B también se anota con @Entity y se extiende A, y C se extiende B y también se anota @Entity, todo se recogerá.
No he utilizado unido subclases combinados con valores discriminadores, pero estoy seguro de que será muy similar a lo que se hace en XML (utilizando @DiscriminatorColumn y @DiscriminatorValue)
Esto es incorrecto. Hay una gran diferencia entre el polimorfismo implícito al que se refiere y en realidad mapear la jerarquía de clases. – ChssPly76
¿Puede profundizar en esta afirmación? No sabía que estaba aludiendo al polimorfismo implícito, no era mi intención. Quería describir una jerarquía A <- B <- C ... –
"La herencia entre clases anotadas @Entity se recoge automáticamente", eso es polimorfismo implícito. Para mapear la jerarquía de clase real, debe anotar explícitamente la clase raíz con '@ Inheritance' (además de usar anotaciones adicionales según la estrategia elegida). – ChssPly76
Esto es exactamente lo que funcionaba bien para mí:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="LoanType",discriminatorType="String")
@Table(name = "A")
public class A implements Serializable{
}
@Entity
@Table(name= "B")
@PrimaryKeyJoinColumn(name = "B_ID", referencedColumnName ="A_ID")
public class B extends A{
}
@Entity
@Table(name= "C")
@PrimaryKeyJoinColumn(name = "C_ID", referencedColumnName = "B_ID")
public class C extends B{}
Creo que esta no era la pregunta. Quiere usar columnas discriminatorias por lo que yo entendí. Esa es la razón por la que compre mi respuesta, tu reputación aquí es mucho más alta, así que muy bien podría estar equivocado :-) –
@Michal - OP no menciona el discriminador en ningún lado. La pregunta a la que se vinculó dice que el discriminador se usa por razones históricas, pero no dice que quiera seguir utilizándolo. En cualquier caso, si OP quiere usar discriminadores, es muy posible: he actualizado mi respuesta para mostrar un ejemplo. – ChssPly76
Resulta que estaba en el camino correcto pero tenía un problema más básico en mi hbm que hizo que mis anotaciones no se recogieran. Gracias por la respuesta clara de todos modos. ¡Aclamaciones! –