当前位置: 首页 > 面试题库 >

Hibernate抛出带有嵌入式ElementCollection的ConcurrentModificationException

马国源
2023-03-14
问题内容

我正在运行Hibernate 4.2.6.Final /
JPA2,并尝试具有@Embeddable对象的@ElementCollection列表,这些对象本身包含String的@ElementCollection列表。

但是,hibernate在尝试实例化EntityManager时抛出ConcurrentModificationException,我根本不了解。

如果我注释掉List<Address>in User,则一切运行正常。同样,如果我注释掉List<String> streetin
Address,那么所有内容也会正常启动。我假设它与具有自己的嵌入式ElementCollection的ElementCollection有关。

public class User {

    @TableGenerator( name="UUIDGenerator", pkColumnValue="user_id", table="uuid_generator", allocationSize=1)
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator="UUIDGenerator")
    @Column(name = "id")
    private Long id;

    /**
     * Login username
     */
    @NotNull
    private String username;

    /**
     * Password in encrypted format
     */
    private String password;
    /**
     * Address
     */
    @Valid
    @ElementCollection(fetch=FetchType.LAZY)
    @CollectionTable(name="user_address", joinColumns=@JoinColumn(name = "user_id", referencedColumnName = "id"))
    @OrderColumn
    private List<Address> address;

   // getters and setters omitted for brevity
}


@Embeddable
public class Address {

    /**
     * Multiple street lines allowable
     */
    @NotBlank
    @ElementCollection(targetClass=String.class, fetch=FetchType.LAZY)
    @CollectionTable( joinColumns=@JoinColumn(name = "address_id", referencedColumnName = "id"))
    @OrderColumn
    private List<String> street;

    /**
     * City
     */
    private String city;

    /**
     * State/Province
     */
    private String state;

    /**
     * Country
     */
    private String country;

    // getters and setters omitted for brevity
}


Caused by: java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
    at java.util.ArrayList$Itr.remove(ArrayList.java:845)
    at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1633)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1390)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1777)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:899)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:76)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:288)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)
    ... 40 more

我是否不允许嵌入式班级有自己的班级@ElementCollection?这是不允许的吗?否则我该怎么做?


问题答案:

我花了一些时间进行深入研究,并在SO上发现了类似的问题,该问题又引用了此Jira问题:

ConcurrentModificationException当可嵌入的集合包含一个集合时

它已经在2007年提出,但是迄今为止还没有实现。

目前的解决方法是使Address成为一个Entity,但保持生命周期User



 类似资料:
  • 我正在运行Hibernate 4.2.6。Final/JPA2,并尝试创建一个由@embedded对象组成的@ElementCollection列表,这些对象本身包含一个字符串的@ElementCollection列表。 但是,当尝试实例化EntityManager时,hibernate会抛出一个ContoptModificationException,我一点也不明白。 如果我注释掉我的

  • 在搜索了JPA文档和各种帖子后,我很困惑以下内容是否适用于JPA2。我刚开始学JPA所以如果我做了什么蠢事, 我的领域模型有一个“投资组合”,其中包含零个或多个“未平仓”。头寸由“工具”(JPA实体)和价格(双倍)组成。投资组合如下: OpenPosition嵌入式系统如下所示: 而该工具实体为: 当我试图使用这个时,模式被创建,我能够持久化投资组合,但是当我试图检索它们时,我在仪器类的hashC

  • 我有一个相当典型的场景,其中有一个main@实体,他内部的所有内容都是可嵌入的(因此,没有父实体,内部的所有内容都没有意义)。现在JPA 2.0阻止我在另一个@ElementCollection中定义的@Embeddeble中嵌套一个@ElementCollection: JSR-317 2.6可嵌入类和基本类型的集合包含在元素集合中的可嵌入类(包括另一个可嵌入类中的可嵌入类)不得包含元素集合,也

  • 我在集成Hibernate和EHCache时遇到了一些问题。我使用的是Hibernate 3.2.7 GA、Hibernate Annotation 3.2.1 GA、hibernate-commons-annotations 3.2.0.final、net.sf.ehcache 2.2.0和Spring Version3.2.4.release。当我运行测试用例时,我得到了net.sf.ehca

  • Spring Boot:2.0.3.发布 kafka.kafka-streams:1.0.0 这看起来像是版本不匹配,但我不清楚我应该对我做什么。

  • 问题内容: 我们有一个基于Java的系统,该系统从数据库中读取数据,将各个数据字段与预设标签合并,然后将结果转换为with 。 在格式,它看起来是这样的: 现在,我正在寻找一种允许某些字段包含静态 HTML格式 内容的方法。此内容将通过我们的支持HTML编辑器生成(沿着线的东西,等),或者从外部粘贴。 我的计划是遵循此JavaWorld文章的配方: 用于将HTML格式的字符串转换为正确的XHTML