我有一个例外

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

抛出以下代码:

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();

子(“事物”)映射为:
@ManyToOne
private Parent parent;

根据Hibernate手册:

ElementCollection上没有层叠选项,目标对象始终与其父对象保持,合并或删除。

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

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

最佳答案

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

javadoc中获取@ElementCollection:

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

07-24 21:37