使用@ElementCollection Hibernate未保存的实例异常

时间:2011-07-03 00:02:12

标签: java hibernate jpa-2.0 java-ee-6

我收到了异常

  

对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例

抛出以下代码:

public void addThing(String key, String someData) {
    Thing thing = new Thing();
    booking.setData(someData);
    booking.setParent(this);
    bookings.put(key, thing);
}

父映射是:

@ElementCollection(fetch=FetchType.EAGER)
@Column(name="thing", nullable=false)
@MapKeyColumn(name="key")
@JoinColumn(name="parent_id")
protected Map<String, Thing> things = Maps.newHashMap();

孩子('Thing')映射是:

@ManyToOne
private Parent parent;

根据Hibernate手册:

  

ElementCollection上没有级联选项,目标对象始终保持,合并,与父级一起删除。

但是 - 在我更改为新的@ElementCollection映射之前解决了一个问题,即我为查询返回了明显的幻像元素,这段代码工作正常。

我知道我可以单独保存元素然后进行引用,但我更喜欢自动完成它,我认为这是应该工作的方式。有什么想法吗?

1 个答案:

答案 0 :(得分:10)

@ElementCollection不应与实体集合一起使用;它与@Embeddable的集合一起使用。如果Thing是实体,则不使用@ElementCollection,而是使用@OneToMany

来自@ElementCollection的{​​{3}}:

  

定义基本类型或可嵌入类的实例集合