因此,经过多次尝试并尝试按照我想要的方式进行工作,并且当然要检查不同的指南,现在我来找你们。Hibernate继承映射问题
我的计划是这样设计的工作:
角色(父对象) -persona_cuil(DB上PK,由用户生成的)
empleado(人物的儿子) -legajo_id(PK上DB,通过程序生成NOT DB(想不出使这项工作要么)) -persona_cuil(FK从角色)
empvarios(empleado的儿子) -legajo_id(从empleado PK和FK)
现在,数据库以这种方式映射,它工作得很好,问题似乎是某处的休眠混合了发送给每个对象的主键,而不是在empvarios中插入一个legajo_id,而是插入一个persona_cuil。
代码clases:
角色:
@Entity
@Table(name = "persona")
@Inheritance(strategy = InheritanceType.JOINED)
public class persona implements Serializable {
private static final long serialVersionUID = 2847733720742959767L;
@Id
@Column(name="persona_cuil")
private String persona_cuil;
@Column(name="nombre")
private String nombre;
@Column(name="apellido")
private String apellido;
@Column(name="fecha_nac")
private String fecha_nac;
@Column(name="direccion")
private String direccion;
@Column(name="localidad")
private String localidad;
@Column(name="provincia")
private String provincia;
@Column(name="pais")
private String pais;
@Column(name="fecha_muerte")
private String fecha_muerte;
@Column(name="fecha_alta")
private String fecha_alta;
@Column(name="fecha_baja")
private String fecha_baja;
@Column(name="mail")
private String mail;
@Column(name="plan_id")
private int plan_id;
public persona(){
this.setPlan_id(0);
}
//Getters and Setters
}
empleado:
@Entity
@Table(name = "empleado")
@Inheritance(strategy = InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name="persona_cuil")
public class empleado extends persona implements Serializable {
private static final long serialVersionUID = -7792000781951823557L;
@Column(name="legajo_id")
private int legajo_id;
public empleado(){
super();
int leg = SentenceManager.ultimoRegistro("empleado");
if (leg == 0){ //this works fine, it just searches the last registry, if it exists, i uses the next available number
this.setLegajo_id(1);
}
else {
this.setLegajo_id(leg+1);
}
}
//Getters and Setters
}
empvarios:
@Entity
@Table(name="empvarios")
@PrimaryKeyJoinColumn(name="legajo_id")
public class empvarios extends empleado implements Serializable, ToPersona{
private static final long serialVersionUID = -6327388765162454657L;
@Column(name="ocupacion_id")
int ocupacion_id;
public empvarios() {
super();
this.setLegajo_id(super.getLegajo_id());
}
//Getters and setters
}
现在,如果我尝试插入一个新的empleado成数据库,它只是工作罚款......但如果我尝试插入一个empvarios,在应该legajo_id的地方,休眠放置persona_cuil(我通过删除数据库上的FK限制来测试这个)
图片如下: (不能图片由于名誉限制:/) https://www.dropbox.com/sh/mu5c797adlf7jiv/AACnd8mx7GriSyq5OMKoddRna?dl=0 在那里你有3张照片,文件的名称显示每个表是哪一个表。
关于发生什么事情的任何想法?