JPA坚持关系

时间:2016-06-06 17:29:11

标签: hibernate jpa

如果我有以下具有多个外键关系的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转换为所需的对象以保持不变。有没有更好的方法来解决这个问题?

1 个答案:

答案 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);