具有复合键的表上的OneToMany映射返回空列表

时间:2018-06-17 21:15:56

标签: java hibernate jpa

当我尝试获取子表的项目列表时,我一直在努力进入具有复合主键的实体的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

0 个答案:

没有答案