我有一个例外
对象引用未保存的瞬态实例-在刷新之前保存瞬态实例
抛出以下代码:
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
:
定义基本类型或可嵌入类的实例的集合