Причина, по которой вы получаете значение null
в таблице Телефон, потому что вы используете insertable = false
в своем определении JoinColumn
. Если бы вы могли установить значение true
, то ваша проблема была бы решена.
Hibernate не поддерживает смешивание вставляемых и не вставляемых столбцов. Таким образом, вы также должны сделать companyId
вставляемым. Но это приводит к возможности изменения вашего первичного ключа в таблице Phone
, которая вам не нужна.
Итак, у нас остается два варианта, если EMPLOYEE_NUMBER
одинаков в обеих таблицах, не создавайте новый столбец EMPLOYEE_NUMBER_NEW
столбец и используйте EMPLOYEE_NUMBER
.
Ноесли EMPLOYEE_NUMBER
не совпадает в обеих таблицах, и вам необходимо сохранить номер сотрудника из объекта сотрудника, создать еще один вставляемый столбец, это может быть COMPANY_ID_EMP
и сделать обновляемым значение false. Таким образом, при сохранении объекта телефона будут сохранены как EMPLOYEE_NUMBER_NEW
, так и COMPANY_ID_EMP
. Но на практике COMPANY_ID_EMP
и COMPANY_ID
будут одинаковыми значениями.
Следующий код работал для меня
@ManyToOne
@JoinColumns({
@JoinColumn(name = "companyIdEmp", referencedColumnName = "companyId", updatable = false),
@JoinColumn(name = "employeeNumberNew", referencedColumnName = "employeeNumber", updatable = false)})
private Employee employee;