Herencia

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

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

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.