У меня есть бэкэнд Spring Data Spring, использующий Hibernate в качестве реализации ORM.JPA - отношение @OneToOne для поля непервичного ключа не работает
Это модель:
__________ _________________________
|Person | |MailConfig |
|________| |_______________________|
| id PK | | uid PK-FK(Person.uid) |
| uid | | ... |
| ... | | |
|________| |_______________________|
@Entity
@Table(name="Person")
public class PersonEntity{
@Id
private String id;
private String uid;
@OneToOne(mappedBy="id", fetch=FetchType.EAGER)
private MailConfigEntity mailConfigNotes;
...
}
@Entity
@Table(name="MailConfig")
public class MailConfigEntity implements Serializable{
@Id
@OneToOne
@JoinColumn(name="uid", table="Person", referencedColumnName="uid", insertable = false, updatable = false)
private PersonEntity id;
...
}
Person таблица соединяется с MailConfig таблицы через поле, которое не является первичным ключом персоны. Когда я загружаю объект с использованием personDAO.findOne(id)
, я могу видеть, что соединение в запросе выполняется против person.id вместо person.uid (on personent0_.id=mailconfig2_.uid
). Любая идея, почему это не работает?
журнал запросов:
select
personent0_.id as id8_2_,
personent0_.uid as uid8_2_,
mailconfig2_.uid as uid5_1_
from
Person personent0_
left outer join
mailconfig mailconfig2_
on personent0_.id=mailconfig2_.uid
where
personent0_.id=?
Итак ... Вы имеете в виду, что OneToOne ассоциация не поддерживает вступление в несырьевой клавише? – codependent
@WornOutSoles - да, я верю в это, вы можете проверить документацию относительно аннотации oneToOne: https://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/ – mel3kings
Я не согласен, кажется, поддерживается , Из документации, которую вы связали, раздел 2.2.5.1. Один-к-одному: 'Обратите внимание, что при использовании ссылочного столбца ColumnName в столбце не первичного ключа связанный класс должен быть Serializable. Также обратите внимание, что ссылочное имяColumnName в столбец не первичного ключа должно быть сопоставлено с свойством, имеющим один столбец (другие случаи могут не работать). – codependent