Curso de Hibernate | Herencia 1

Curso de Hibernate
Herencia

Curso de Hibernate | Herencia 2

Herencia con discriminador

// Opción por defecto, si no la ponemos todo queda igual
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@Entity
public class Publicacion {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY) 
 private int id;
 private String titulo;
 private int precio;
 @ManyToOne
 private Autor autor;
@Entity
public class Libro  extends Publicacion{

 private String isbn;
@Entity
public class Articulo  extends Publicacion{

 private String nombreRevista;

Sería posible introducir un listado de libros y un listado de artículos dentro de un autor utilizando un código similar a este:

autor.setPublicaciones(libros.stream().map(T-> (Publicacion)T).collect(Collectors.toList()));
autor.setPublicaciones(articulos.stream().map(T-> (Publicacion)T).collect(Collectors.toList()));    

¿Qué ocurre en la base de datos?

DTYPEidpreciotituloisbnnombreRevistaautor_id
Publicacion

Herencia con joins

@Inheritance(strategy=InheritanceType.JOINED)
@Entity
public class Publicacion {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY) 
 private int id;
 private String titulo;
 private int precio;
 @ManyToOne
 private Autor autor;
@Entity
@PrimaryKeyJoinColumn(name="publicacionId")
public class Libro  extends Publicacion{
 
 private String isbn;
@Entity
@PrimaryKeyJoinColumn(name="publicacionId")
public class Articulo  extends Publicacion{

 private String nombreRevista;

¿Qué ocurre en la base de datos?

idpreciotítuloautor_id
Publicacion
isbnpublicacionID
Libro
nombreRevistapublicacionID
Articulo