我正在运行Hibernate 4.2.6。Final/JPA2,并尝试创建一个由@embedded对象组成的@ElementCollection列表,这些对象本身包含一个字符串的@ElementCollection列表。
但是,当尝试实例化EntityManager时,hibernate会抛出一个ContoptModificationException,我一点也不明白。
如果我注释掉我的列表
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问题:
当可嵌入集合包含集合时的异常
它已经在2007年提出,但迄今为止尚未实施。
目前的解决方法是将地址转换为Entity
,但通过User
维护生命周期。
这是一个已经向Hibernate开发人员报告的问题,没有计划修复!很抱歉看见https://hibernate.atlassian.net/browse/HHH-4313.
问题内容: 我正在运行Hibernate 4.2.6.Final / JPA2,并尝试具有@Embeddable对象的@ElementCollection列表,这些对象本身包含String的@ElementCollection列表。 但是,hibernate在尝试实例化EntityManager时抛出ConcurrentModificationException,我根本不了解。 如果我注释掉in
我有一个相当典型的场景,其中有一个main@实体,他内部的所有内容都是可嵌入的(因此,没有父实体,内部的所有内容都没有意义)。现在JPA 2.0阻止我在另一个@ElementCollection中定义的@Embeddeble中嵌套一个@ElementCollection: JSR-317 2.6可嵌入类和基本类型的集合包含在元素集合中的可嵌入类(包括另一个可嵌入类中的可嵌入类)不得包含元素集合,也
问题内容: 我想做这样的事情: 对象ReportingFile可以是LogRequest或LogReport文件。(两者结构相同) 一个对象Reporting,其中包含一个logRequest,其中包含带日期的logReport列表。 我试图设置一个EmbededId,这将是logRequest的属性。这就是我遇到的问题。我没有来管理嵌入式ID。(http://docs.jboss.org/hib
问题内容: 我想在 独立应用程序* 中将 hibernate 与 嵌入式derby 一起使用,并且我有一些问题: * 我需要什么jar? 必要的hibernate配置是什么? 还有其他必要的配置吗? 查询/条件是否有任何问题/限制? 如果您还可以建议我一些适合这种方法的好教程,那将是可取的,谢谢。 问题答案: 我将Apache Derby与Hibernate一起用于测试项目的一个模型类(它们的 e
我遇到了一个问题,在我的JPA表中没有任何内容被持久化。据我所知,我想我理解了的基本思想。我猜出现问题的原因是,我在一个可嵌入的对象中有一个。 一个简单的例子: 有什么线索表明可能出了什么问题吗? 为了简洁起见,我将尽量使附加信息尽可能简短。 创建计算原因 创建计算历史记录 调试信息在计算历史#创建 HibernateDAO仓库 Hibernate生成的SQL 看起来HiberNate甚至没有生成