Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate继承,多态保存_Java_Sql_Hibernate_Inheritance - Fatal编程技术网

Java Hibernate继承,多态保存

Java Hibernate继承,多态保存,java,sql,hibernate,inheritance,Java,Sql,Hibernate,Inheritance,我有一个类Person,有两个子类Student和Employee @Entity(name="person") @Inheritance(strategy = InheritanceType.JOINED) public class Person implements Serializable { @Id @GeneratedValue private Integer id; } @Entity(name="student") @PrimaryKeyJoinColum

我有一个类
Person
,有两个子类
Student
Employee

@Entity(name="person")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person implements Serializable {
    @Id
    @GeneratedValue
    private Integer id;
}

@Entity(name="student")
@PrimaryKeyJoinColumn(name="id")
public class Student extends Pessoa implements Serializable {
}

@Entity(name="employee")
@PrimaryKeyJoinColumn(name="id")
public class Employee extends Person implements Serializable {
}
学生也可以是员工,但当我尝试使用与员工相同的id保存学生时,hibernate会抛出一个重复的主键异常

org.hibernate.exception.ConstraintViolationException: Duplicate entry '142.855.267-71' for key 'PRIMARY'
hibernate正在尝试在数据库中插入一个新的用户,我不希望这样

有没有一种方法可以让hibernate识别数据库中已经存在一个人,并只保存对此人的引用?


顺便说一句:当我手动插入一名学生和一名员工时,一切都像一个符咒一样工作。

您需要指定表和列映射。下表为每个子类的映射

@Entity(name="person")
@Table(name = "PERSON")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person implements Serializable {
    @Id
    @GeneratedValue
    @Column(name = "ID")
    private Integer id;
}

@Entity(name="student")
@Table(name="STUDENT")
@PrimaryKeyJoinColumn(name="id")
public class Student extends Pessoa implements Serializable {
}

@Entity(name="employee")
@Table(name="EMPLOYEE")
@PrimaryKeyJoinColumn(name="id")
public class Employee extends Person implements Serializable {
}

感谢您的回复,但它仍然会抛出相同的错误