【发布时间】:2016-06-06 17:29:10
【问题描述】:
如果我有以下具有多个外键关系的实体对象,当我没有在请求中取回关系对象时如何处理表单提交。
实体可能看起来像这样:
@Entity
@Table(name = "employee")
public class Employee implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "middle_name")
private String middleName;
@Column(name = "login_id")
private String loginId;
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "department_id")
private Department department;
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "employment_type_id")
private EmploymentType employmentType;
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "citizenship_id")
private Citizenship citizenship;
public Employee() {
}
}
但这是我将收到的 HTTP POST 请求。
id: 1
firstName: Bob
lastName: Dole
middleName: Trump
loginId: bdole
departmentId: 1
employmentTypeId: 2
citizenship_id: 4
JPA 想要保存关系对象,而不是 ID。然而,做所有这些查找也似乎效率低下,将 ID 转换为持久化所需的对象。有没有更好的方法来处理这个问题?
【问题讨论】:
-
您是否想过将外键映射为基本映射,而不是使其成为参考映射?如果您的应用程序不需要获取和传递完整的部门、就业类型和公民身份,为什么要在对象模型中为您的应用程序增加负担呢?尽管您可能需要执行查找以确保这些 ID 存在,否则您的帖子可能会为您提供不存在的部门编号,因此您可能仍需要进行查找。