【发布时间】:2017-08-14 07:39:12
【问题描述】:
我正在开发 Spring - Hibernate 应用程序,我有一个关于如何正确避免重复代码和使用 Hibernate 的问题,因为无法使用多重继承(我通常使用 Python,所以这不是“问题”)。
我的 UML:
http://i.imgur.com/9GD1sjV.png
我的班级,例如,Periodic,Livro 或 Prototexto 的相同扩展了 GenericEntity:
@Entity
@Table(name = "periodico")
public class Periodico extends GenericEntity {
}
我的问题是:¿在这种两个类的情况下实现继承的方法是什么?
目前我正在这样做并且它有效。但是我在每个类中都复制了一些代码(Produçao activa)。
/**
* 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;
[...]
}
还有我的 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;
}
}
非常感谢。
【问题讨论】:
-
什么意思? Java 不支持多重继承。
-
谢谢@SachinSarawgi。我知道,我只是想减少重复代码。也许创建一个界面。我认为重复变量不是实现它的正确方法。所以......如果Java不支持多重继承,我应该复制代码,还是可以使用其他方式。这才是重点。再次感谢您。
-
没有“正确”的方式,这与 JPA API 无关,它只是将您定义的类保持不变
-
看看Code Review。这个问题更适合那里。
-
交叉发布here
标签: java spring hibernate multiple-inheritance