gpt4 book ai didi

java - 使用@ElementCollection hibernate 未保存的实例异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:29 24 4
gpt4 key购买 nike

我遇到了异常

object references an unsaved transient instance - save the transient instance before flushing

抛出以下代码:

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 手册:

There is no cascade option on an ElementCollection, the target objects are always persisted, merged, removed with their parent.

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

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

最佳答案

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

来自javadoc对于 @ElementCollection:

Defines a collection of instances of a basic type or embeddable class

关于java - 使用@ElementCollection hibernate 未保存的实例异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6560255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com