java - Hibernate 使用嵌入的 ElementCollection 抛出 ConcurrentModificationException

标签 java hibernate jpa

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

但是,当尝试实例化 EntityManager 时,hibernate 会抛出 ConcurrentModificationException,我根本不明白。

如果我注释掉我的List<Address>User ,一切运行正常。同样,如果我注释掉 List<String> streetAddress ,一切也都正常启动。我认为它与具有自己的嵌入式 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 ?这是不允许的吗?否则我该怎么做?

最佳答案

这个问题已经报告给 Hibernate 开发人员,并且没有计划修复!对不起。请参阅https://hibernate.atlassian.net/browse/HHH-4313 .

关于java - Hibernate 使用嵌入的 ElementCollection 抛出 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20359574/

相关文章:

java - Hql "in"语句不适用于 @ElementCollection

java - 具有联接的 JPA 查询和非表的自定义对象

hibernate - 通过提供整个对象来删除记录的命名查询

java - 如何使用 Selenium 读取pdf文件

PaintComponent中的JAVA setColor保持空白

java - 在 Apache Flume 1.5 中的何处放置自定义 jar?

Ubuntu 18.04 上的 Java-jre 安装问题

java - 无法为非实体集合创建元素连接

hibernate - 带有 JPA 2.1 的 Websphere 8.5

java - Hibernate 如何在 hibernate 标准中将 eager、select、batch 更改为延迟加载