将JPA集合加载为不可变的

时间:2015-07-20 04:58:15

标签: java hibernate jpa orm hibernate-mapping

我正在使用JPA 2.1hibernate作为JPA实施。我想加载一个关系作为不可变的集合。

让我们举一个employeremployee个实体的示例,其中fetchtype设置为employees字段上的eagar。可以做些什么来指示JPA将员工集合加载为不可变的?

1 个答案:

答案 0 :(得分:2)

  1. 您可以使用@Immutable Hibernate特定注释:

    @OneToMany(mappedBy = "employer")
    @Immutable
    List<Employee> employees = new ArrayList<>();
    
  2. 另一种选择是在返回之前克隆该集合:

    假设您有一个员工列表,您可以这样映射:

    @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)可确保克隆整个实体图,从而与托管父实体分离。