java - 如何使用 JPA 和 Hibernate 映射不可变集合

标签 java hibernate jpa orm hibernate-mapping

我正在使用 JPA 2.1 和 Hibernate 作为 JPA 实现,我想将关系加载为不可变集合。

让我们举一个 Employer 父实体的例子,它有一个 employees 子集合。

如何指示 JPA 加载不可变的 employees 集合?

最佳答案

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

关于java - 如何使用 JPA 和 Hibernate 映射不可变集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31509090/

相关文章:

java - 使用相同的可运行实例初始化两个线程

java - Spring data jpa 不与自动配置的entityManagerFactory 一起使用

java - CPU模拟,随机化突发、等待和优先级

java - 计数语句 : Database (like h2) vs. Lucene vs.?

java - Hibernate 过滤查询集合

java - Spring : Error setting property values; nested exception is org. springframework.beans.NotWritablePropertyException

java - JPA 和 Hibernate 有什么区别?

java - Hibernate 查询以选择 Datetime 列的时间范围内的行

java - Spring Batch - 如何在逐页浏览数据时修改存储库中的数据?

java - 在 web.xml 中添加条件