我正在使用JPA 2.1
和hibernate
作为JPA
实施。我想加载一个关系作为不可变的集合。
让我们举一个employer
和employee
个实体的示例,其中fetchtype设置为employees
字段上的eagar。可以做些什么来指示JPA
将员工集合加载为不可变的?
答案 0 :(得分:2)
您可以使用@Immutable Hibernate特定注释:
@OneToMany(mappedBy = "employer")
@Immutable
List<Employee> employees = new ArrayList<>();
另一种选择是在返回之前克隆该集合:
假设您有一个员工列表,您可以这样映射:
@OneToMany(mappedBy = "employer")
List<Employee> employees = new ArrayList<>();
public List<Employee> getEmployees() {
return org.apache.commons.lang.SerializationUtils.clone(employees);
}
通过省略setter
并让getter
仅返回支持列表的副本,您可以实现不变性。使用深层拷贝克隆(例如org.apache.commons.lang.SerializationUtils
)可确保克隆整个实体图,从而与托管父实体分离。