У меня есть 2 класса сущностей: Student является родительским и Address является дочерним с однозначным отображением:
Student
student_id int (pk), roll_no int (pk), имя varchar
Адрес
student_id (pk, fk), страна varchar
student_id в объекте адреса является одновременно первичным ключом и внешним ключом
Студенческий класс Entity:
@Entity
@Table(name = "student")
public class Student {
@EmbeddedId
private StudentPrimaryKey studentPrimaryKey;
@Column(name = "name")
private String name;
@OneToOne(mappedBy = "student", cascade = CascadeType.ALL)
private Address address;
........
Класс StudentPrimaryKey:
@Embeddable
public class StudentPrimaryKey implements Serializable{
@Column(name = "student_id")
private long id;
@Column(name = "roll_no")
private long rollNo;
....
Адрес Класс Entity:
@Entity
@Table(name = "address")
public class Address {
@Id
@Column(name = "student_id")
private long id;
@Column(name = "country")
private String country;
@OneToOne
@JoinColumn(name = "student_id")
@MapsId
private Student student;
.......
Исключение - org.hibernate.AnnotationException: неявная ссылка на столбец в отображении @MapsIdне удается, попробуйте использовать явное referenceColumnNames
Я понимаю, что в родительской таблице есть 2 столбца первичного ключа, и @MapsId не может определить, с каким из них следует сопоставить внешний ключ в родительской таблице, поэтому я попытался использоватьreferencedColumnName в Address Entity -
@OneToOne
@JoinColumn(name = "student_id", referencedColumnName = "student_id")
@MapsId
private Student student;
Новое исключение: невозможно найти ссылку на столбец в отображении @MapsId: roll_no
Сверху он пытается найти отсутствующийстолбец из составного первичного ключа в родительском классе, но этот столбец нам не нужен.
[ Hibernate - составной первичный ключ содержит внешний ключ
Это один изссылка, которая разделяет ту же проблему, которая говорит, что JPA / hibernate не позволяет частичным составным первичным ключам быть внешними ключами.
Пожалуйста, предоставьте вашу поддержку, чтобы помочь мне справиться с этим.