如果我有以下具有多个外键关系的Entity对象,当我在请求中没有得到关系对象时,如何处理表单提交。
实体可能看起来像这样:
@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转换为所需的对象以保持不变。有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
使用getReference http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#getReference%28java.lang.Class,%20java.lang.Object%29
它调用entityManager使用id加载客户对象,然后将其设置到客户历史记录中。在大多数情况下,此调用将返回仅嵌入了id的代理。
Department department = entityManager.getReference(Department.class, departmentId);
Employee employee = new Employee();
employee.setDepartment(department);