我正在运行 Hibernate 4.2.6.Final/JPA2 并尝试拥有 @Embeddable 对象的 @ElementCollection 列表,这些对象本身包含 String 的 @ElementCollection 列表。
但是,当尝试实例化 EntityManager 时,hibernate 会抛出 ConcurrentModificationException,我根本不明白。
如果我注释掉我的List<Address>
在User
,一切运行正常。同样,如果我注释掉 List<String> street
在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
?这是不允许的吗?否则我该怎么做?
最佳答案
这个问题已经报告给 Hibernate 开发人员,并且没有计划修复!对不起。请参阅https://hibernate.atlassian.net/browse/HHH-4313 .
关于java - Hibernate 使用嵌入的 ElementCollection 抛出 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20359574/