繁体   English   中英

Hibernate继承映射问题

[英]Hibernate Inheritance mapping issue

因此,在尝试并尝试按照我想要的方式进行这项工作,当然还要查看其他指南之后,我现在来找你们。

我的程序设计如下:

角色(父亲对象)-persona_cuil(数据库上的pk,由用户生成)

empleado(角色角色的儿子)-legajo_id(DB上的pk,由程序NOT DB生成(也无法执行))-persona_cuil(角色角色的FK)

empvarios(emppleado的儿子)-legajo_id(emppleado的PK和FK)

现在,数据库是按这种方式映射的,并且工作正常,问题似乎在于休眠状态混合了发送给每个对象的主键,并且没有在empvarios中插入legajo_id,而是插入了persona_cuil。

分句代码:

角色:

@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,它就可以正常工作……但是,如果我尝试在一个应为legajo_id的地方插入一个empvarios,则休眠将persona_cuil放置(我通过删除FK进行了测试数据库限制)

下图图片:(由于声誉限制,无法发布图片:/) https://www.dropbox.com/sh/mu5c797adlf7jiv/AACnd8mx7GriSyq5OMKoddRna?dl=0那里有3张照片,文件名显示了每个表是哪张。

有什么想法吗?

问题是数据库映射错误。

如果有人遇到此问题,那么您将不得不重新考虑数据库的结构。

如我上面给出的示例所示,数据库应如下所示:

persona:
persona_id  (PK-autoincemental)

empleado:
persona_id (FK to persona)
legajo_id

empvarios:
persona_id (FK to persona)
ocupacion_id

之所以这样工作,是因为您不能使用不同的ID来依赖数据库中的不同分类。 在程序方面,它“可以”那样工作,但是必须以不同的方式映射它的数据库。

谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM