Как сопоставить одно поле внутри составного ключа как первичный ключ другого объекта - PullRequest
0 голосов
/ 03 мая 2018

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

@Embeddable
class EmployeeDetails {
    @Column(name="empid")
    Long empId;
    @Column(name="empdept")
    String empDept;
}

@Entity
class Employee {

    @EmbeddedId
    EmployeeDetails empDetails;

    @OneToOne (mappedBy = "employee")
    Address address;
}

@Entity
class Address {
    String permanentAddrs;
    @Id
    @OneToOne
    @JoinColumn(name = "empId", referencedcolumnname = "empDetails.empid")
    Employee employee;
}

Что я хочу сделать, так это сделать empId EmployeeDetails в качестве primaryKey в Address сущности. Но когда я делаю выше, я получаю следующее исключение:

org.hibernate.MappingException: не удалось найти столбец с логическим именем: empDetails.empid в org.hibernate.mapping.Table (employee) и связанных с ним надставных и вторичных таблицах

Является ли приведенное выше отображение правильным?

1 Ответ

0 голосов
/ 03 мая 2018

@ Шихар: прежде чем углубляться в исключение, в дизайне, который вы пытаетесь помешать, выглядит большой недостаток.

дизайн выглядит неисправным, почему?

  1. вы создали отношение 1: M между Сотрудником и адресом и в таблице адресов Вы пытаетесь использовать empId в качестве первичного ключа. Это совершенно неправильно.
  2. То, что вы пытаетесь достичь, это то, что вы хотите использовать один из столбцов составного ключа (т.е. empId) в качестве FK в таблице адресов. Это выглядит логически неправильно.

Удачи.

...