I'm working on a Spring - Hibernate App, and I have a question about how to correctly avoid duplicate code and using Hibernate, due to the impossibility of using use multiple inheritance (I usually work with Python so this is not a "problem").
My UML:
https://i.stack.imgur.com/LdEwf.png
My class, Periodico, for example, the same for Livro or Prototexto extends GenericEntity:
@Entity
@Table(name = "periodico")
public class Periodico extends GenericEntity {
}
My question is: ¿what is the way to implement inheritance in this case of two classes?
At this moment I'm doing this and it works. But I duplicate some code (Produçao activa) in each class.
/**
* Created by hlorenzo on 03/08/2017.
*/
@Entity
@Table(name = "prototexto")
public class Prototexto extends GenericEntity {
private String titulo;
/*
Código alfanumérico composto por nº de clase + tipo (3 iniciais) + nº Id (3 cifras) + data_ano
*/
@JsonView(JsonViews.DetailedList.class)
@Column(name = "numerasao")
private String numerasao;
/*
La utilización del prefijo nacimiento es para que funcione con el componente fecha.component.js de forma automática.
*/
@JsonView(JsonViews.DetailedList.class)
@Column(name = "publicacion_dia")
private Integer nacimientoDia;
@JsonView(JsonViews.DetailedList.class)
@Column(name = "publicacion_mes")
private Integer nacimientoMes;
@JsonView(JsonViews.DetailedList.class)
@Column(name = "publicacion_ano")
private Integer nacimientoAno;
@JsonView(JsonViews.DetailedList.class)
@Column(name = "primeira_linha")
private String primeiraLinha;
@JsonView(JsonViews.DetailedList.class)
@Column(name = "ultima_linha")
private String ultimaLinha;
@JsonView(JsonViews.DetailedList.class)
@Column(name = "numero_paginas")
private Long numeroPaginas;
@JsonView(JsonViews.DetailedList.class)
@Column(name = "descrisao")
private String descrisao;
@JsonView(JsonViews.DetailedList.class)
@Column(name = "localizasao")
private String localizasao;
@Enumerated(value = EnumType.STRING)
private TipoPrototexto tipo;
private boolean revisado;
private boolean concluido;
@JsonView(JsonViews.DetailedList.class)
@ManyToOne
@JoinColumn(name="pais_id")
private Pais pais;
@JsonView(JsonViews.DetailedList.class)
@ManyToOne
@JoinColumn(name="ciudad_id")
private Ciudad ciudad;
[...]
}
And my GenericEntity:
@MappedSuperclass
public abstract class GenericEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonView(JsonViews.List.class)
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
Thank you so much.