当我尝试获取子表的项目列表时,我一直在努力进入具有复合主键的实体的OneToMany映射。 我有权利Person和PhoneNumbers。一个人可能有多个电话号码。 PhoneNumber实体具有主键,包括两个字段:id和person_id,它是Person实体的外键。
这是一个数据库架构:
人
id(pk) PERSON_NAME
PHONE_NUMBER:
id(pk) person_id(pk)(fk) PHONE_NUMBER
人类
@Entity(name = "person")
public class Person {
@Id
@Column(name = "id")
private Long id;
@Column(name = "person_name")
private String name;
@OneToMany(mappedBy = "person")
private List<PhoneNumber> phoneNumbers;
// constructor, getters, setters...
}
PhoneNumber课程
public class PhoneNumber {
@EmbeddedId
private PhoneNumberPk phoneNumberPk;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id", insertable = false, updatable = false)
private Person person;
@Column(name = "phone_number")
private String phoneNumber;
// constructor, getters, setters...
}
PhoneNumberPk类
@Embeddable
public class PhoneNumberPk {
@Column(name = "id")
private Long id;
@Column(name = "person_id")
private Long personId;
// constructor, getters, setters...
}
问题是当我从数据库中获取Person实体并调用person.getPhoneNumbers()时,我总是得到空列表。 Hibernate调试显示当我调用person.getPhoneNumbers()时,执行从phone_number表获取数据的查询,但我总是得到空列表。
我正在使用Spring Boot - Spring Data JPA 2.0.7和Hibernate 5.2.17