2013-11-09 4 views
2

У меня есть класс Person с двумя подклассами Student и EmployeeHibernate наследования, полиморфная экономия

@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 { 
} 

Студента также может быть сотрудником, но когда я пытаюсь сохранить студент с тем же идентификатором в качестве работника, спящий режим бросает дубликат первичного ключа исключение

org.hibernate.exception.ConstraintViolationException: Duplicate entry '142.855.267-71' for key 'PRIMARY' 

спящий режим пытается вставить новый человек в базе данных, и я не хочу этого.

Есть ли способ заставить спящий режим признать, что человек уже существует в базе данных и просто сохраняет ссылку на человека?

кстати: когда я вставляю ученика и сотрудника вручную, все работает как шарм.

ответ

0

Необходимо указать отображение таблиц и столбцов. Ниже приведена таблица для отображения подкласса.

@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 { 
} 
+0

благодарит за ответ, но продолжает выдавать ту же ошибку – Lucao

Смежные вопросы