Hibernate继承

Jef*_*Jef 5 java database inheritance hibernate

我正在使用hibernate开发一个项目.我有这两个文件:

Persoon.java

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "PROJ_TYPE")
@Table(name = "PROJECT")
public class Persoon {

    @Id
    @GeneratedValue
    protected int persoonsnummer;
    protected String voornaam;
    protected String achternaam;
    protected String adres;
    protected String geboortedatum;
    protected String telefoonnummer;
    protected String titel;

    // Getters and setters ommited for brevity
}
Run Code Online (Sandbox Code Playgroud)

Patient.java

@Entity
@DiscriminatorValue("P")
@Table(name="PATIENT")
public class Patient extends Persoon implements Serializable {   

    protected String allergieen;
    protected String bijzonderheden;

    // Getters and setters ommited for brevity
}
Run Code Online (Sandbox Code Playgroud)

并且Test.java填充表格:

public class Test {
    public static void main(String[] args) {
        // get a session
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        // Start a tx
        session.beginTransaction();
        // create a person
        Persoon i = new Persoon();
        i.setVoornaam("Henk");
        i.setAchternaam("Oliebol");
        i.setAdres("1234AA Rotterdam");
        i.setGeboortedatum("10-10-1990");
        i.setTelefoonnummer("012345678");
        i.setTitel("Patient");
        session.save(i);

        // create a patient
        Patient p = new Patient();
        p.setAllergieen("geen");
        p.setBijzonderheden("geen");
        session.save(p);// create another car

        // commit the tx, 
        // so that it will be visible in the db
        session.getTransaction().commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望患者继承persoon,解决这个问题的方法是什么?

即做完一个人后,我想把病人连接到persoon.

pap*_*pap 9

我一般不鼓励人们在Hibernate中使用继承/多态,这是一个很好的例子.您从创建这种继承中获得的附加值是否超过了它产生的复杂性?如果只有一个实体用于人,一个用于患者,并且使患者包含一个人,即与一个人有M-1关系,这不是更容易吗?

保持简单,特别是使用Hibernate.关系数据库并不意味着处理继承,它们是为了处理关系,所以为什么要强制它进入它不适合的东西?

  • 我一般都同意你的意见,但我认为不应该这样做是不公平的.Hibernate确实支持这种继承是有原因的,并且总有一些情况下,Hibernate会有一点复杂性会在其他地方节省大量的复杂性. (2认同)