JPA - дискриминатор с несколькими столбцами - PullRequest
0 голосов
/ 10 октября 2011

У меня есть 3 таблицы, подобные этой в MySQL 5:

|               PERSON                     |
|  id   |  fullName  | isEmp  |  isParent  |


|      EMPLOYEE        |
|  personId   |  code  |


|       PARENT         |
|  personId   |  job   |

, в которых Employee.personId и Parent.personId - внешние ключи, указывающие на Person.id.Сотрудник также может быть родителем и наоборот.Итак, как я могу настроить, используя Аннотация JPA 2.0 / Hibernate 3?Спасибо!

1 Ответ

2 голосов
/ 10 октября 2011

Если Person может быть и тем и другим, вы не можете решить это с помощью наследования, потому что Java не допускает множественное наследование. Так что вам придется использовать Aggregation, которая сбивает с толку на семантическом уровне, потому что у нее есть родитель, а не родитель. Но я боюсь, что тебе придется идти по этому пути:

@Entity
public class Person{
    @Id
    private Long id;
    @OneToOne(optional=true)
    private Employee employee;
    @OneToOne(optional=true)
    private Parent parent;
    public boolean isParent(){return parent!=null;}
    public boolean isEmployee(){return employee!=null;}
}
@Entity
public class Employee{
    @Id
    private Long id;
    @OneToOne(mappedBy="employee",optional=false)
    private Person person; 
}
@Entity
public class Parent{
    @Id
    private Long id;
    @OneToOne(mappedBy="parent",optional=false)
    private Person person; 
}

(методы получения / установки и т. Д. Опущены)

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