OneToMany 关系不存储实体字段
OneToMany relationship does not store entity field
保存我的实体时,通过 @OneToMany
关系工作的子实体不会保存到它们的表中。搞不懂怎么回事
员工:
@Entity
@Table(name = "EMPLOYEE", schema = PUBLIC)
public class Employee {
private String name;
private String lastname;
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
List<EmployeePhoneNumber> employeePhoneNumbers = new ArrayList<>();
}
员工电话号码:
@Entity
@Table(name = "EMPLOYEE_PHONES", schema = PUBLIC)
public class EmployeePhoneNumber {
@Id
@SequenceGenerator(allocationSize = 1, name = "SEQ_EMPLOYEE_PHONES", schema = PUBLIC,
sequenceName = "EMPLOYEE_PHONES_ID_SEQ")
@GeneratedValue(generator = "SEQ_EMPLOYEE_PHONES", strategy = GenerationType.SEQUENCE)
@Column(name = "ID", unique = true, nullable = false)
private Long id;
@ManyToOne
@JoinColumn(name = "employee_id", referencedColumnName = "id",
nullable = false, insertable = false, updatable = false)
private Employee employee;
@Column(name = "PHONE_NUMBER", unique = true, nullable = false)
private String phoneNumber;
@Enumerated(EnumType.STRING)
@Column(name = "NUMBER_TYPE", nullable = false)
private PhoneNumberType phoneNumberType;
}
我如何设置这些字段然后保存实体:
EmployeePhoneNumber workPhone = new EmployeePhoneNumber();
workPhone.setPhoneNumber(workPhone);
workPhone.setPhoneNumberType(PhoneNumberType.WORK_PHONE);
EmployeePhoneNumber mobilePhone = new EmployeePhoneNumber();
mobilePhone.setPhoneNumber(mobilePhone);
mobilePhone.setPhoneNumberType(PhoneNumberType.MOBILE_PHONE);
EmployeePhoneNumber corporatePhone = new EmployeePhoneNumber();
corporatePhone.setPhoneNumber(corporatePhoneNumber);
corporatePhone.setPhoneNumberType(PhoneNumberType.CORPORATE_PHONE);
List<EmployeePhoneNumber> employeePhoneNumbers = employee.getEmployeePhoneNumbers();
employeePhoneNumbers.add(workPhone);
employeePhoneNumbers.add(mobilePhone);
employeePhoneNumbers.add(corporatePhone);
employee.setEmployeePhoneNumbers(employeePhoneNumbers);
employeeRepository.save(employee);
该方法完成后,我没有出现任何错误,一切正常,只是表格没有填满 - 为什么?
您还必须在 EmployeePhoneNumber 中设置 Employee 引用,因为 Hibernate 将使用它来保存它。
workPhone.setEmployee(employee);
mobilePhone.setEmployee(employee);
corporatePhone.setEmployee(employee);
最好的解决方案是像这样在 Employee 上创建一个 addEmployeePhoneNumber 方法:
public void addEmployeePhoneNumber(EmployeePhoneNumber phoneNumber) {
phoneNumber.setEmployee(this);
employeePhoneNumbers.add(phoneNumber);
}
这样你就不会忘记设置关系的双方。
保存我的实体时,通过 @OneToMany
关系工作的子实体不会保存到它们的表中。搞不懂怎么回事
员工:
@Entity
@Table(name = "EMPLOYEE", schema = PUBLIC)
public class Employee {
private String name;
private String lastname;
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
List<EmployeePhoneNumber> employeePhoneNumbers = new ArrayList<>();
}
员工电话号码:
@Entity
@Table(name = "EMPLOYEE_PHONES", schema = PUBLIC)
public class EmployeePhoneNumber {
@Id
@SequenceGenerator(allocationSize = 1, name = "SEQ_EMPLOYEE_PHONES", schema = PUBLIC,
sequenceName = "EMPLOYEE_PHONES_ID_SEQ")
@GeneratedValue(generator = "SEQ_EMPLOYEE_PHONES", strategy = GenerationType.SEQUENCE)
@Column(name = "ID", unique = true, nullable = false)
private Long id;
@ManyToOne
@JoinColumn(name = "employee_id", referencedColumnName = "id",
nullable = false, insertable = false, updatable = false)
private Employee employee;
@Column(name = "PHONE_NUMBER", unique = true, nullable = false)
private String phoneNumber;
@Enumerated(EnumType.STRING)
@Column(name = "NUMBER_TYPE", nullable = false)
private PhoneNumberType phoneNumberType;
}
我如何设置这些字段然后保存实体:
EmployeePhoneNumber workPhone = new EmployeePhoneNumber();
workPhone.setPhoneNumber(workPhone);
workPhone.setPhoneNumberType(PhoneNumberType.WORK_PHONE);
EmployeePhoneNumber mobilePhone = new EmployeePhoneNumber();
mobilePhone.setPhoneNumber(mobilePhone);
mobilePhone.setPhoneNumberType(PhoneNumberType.MOBILE_PHONE);
EmployeePhoneNumber corporatePhone = new EmployeePhoneNumber();
corporatePhone.setPhoneNumber(corporatePhoneNumber);
corporatePhone.setPhoneNumberType(PhoneNumberType.CORPORATE_PHONE);
List<EmployeePhoneNumber> employeePhoneNumbers = employee.getEmployeePhoneNumbers();
employeePhoneNumbers.add(workPhone);
employeePhoneNumbers.add(mobilePhone);
employeePhoneNumbers.add(corporatePhone);
employee.setEmployeePhoneNumbers(employeePhoneNumbers);
employeeRepository.save(employee);
该方法完成后,我没有出现任何错误,一切正常,只是表格没有填满 - 为什么?
您还必须在 EmployeePhoneNumber 中设置 Employee 引用,因为 Hibernate 将使用它来保存它。
workPhone.setEmployee(employee);
mobilePhone.setEmployee(employee);
corporatePhone.setEmployee(employee);
最好的解决方案是像这样在 Employee 上创建一个 addEmployeePhoneNumber 方法:
public void addEmployeePhoneNumber(EmployeePhoneNumber phoneNumber) {
phoneNumber.setEmployee(this);
employeePhoneNumbers.add(phoneNumber);
}
这样你就不会忘记设置关系的双方。