简体   繁体   English

TransientObjectException:object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例

[英]TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing

I know this question has been asked numerous times but I couldn't find a suiting answer for me. 我知道这个问题已被多次询问,但我找不到合适的答案。

I've got two entities in a Spring Roo-application which are in a Many-To-Many-relationship, Release and Component. 我在Spring Roo应用程序中有两个实体,它们处于多对多关系,发布和组件中。

First I fetch an instance of an existing Release via 首先,我通过获取现有版本的实例

selectedRelease = Release.findReleasesByReleaseNumberEquals(version).getSingleResult();

The method above is a Roo-generated finder which looks like this: 上面的方法是一个Roo生成的查找程序,如下所示:

public static TypedQuery<Release> Release.findReleasesByReleaseNummerEquals(String releaseNumber) {
    EntityManager em = Release.entityManager();
    TypedQuery<Release> q = em.createQuery("SELECT o FROM Release AS o WHERE LOWER(o.releaseNumber) LIKE LOWER(:releaseNummer)", Release.class);
    q.setParameter("releaseNumber", releaseNumber);
    return q;
}

Then I create a new instance of Component and try to assign it to the selected Release 然后我创建一个新的Component实例,并尝试将其分配给选定的Release

Component component = new Component();

Set<Release> releases = new HashSet<Release>();
releases.add(selectedRelease);

component.setReleases(releases);
component.persist();

Upon trying to execute persist() I get the exception: 在尝试执行persist()时,我得到了异常:

TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.Release; TransientObjectException:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:com.Release;

Does anyone have advice regarding this problem? 有没有人有关于这个问题的建议?

The mappings look like this: 映射看起来像这样:

Release.java: Release.java:

@ManyToMany(cascade = CascadeType.PERSIST, mappedBy = "releases")
private Set<Component> components = new HashSet<Component>();

Component.java Component.java

@ManyToMany(cascade=CascadeType.PERSIST)
private Set<Release> releases = new HashSet<Release>();

The message is clear: you are trying to save an object, component, that references another object that hasn't been saved yet, selectedRelease. 消息很明确:您正在尝试保存引用另一个尚未保存的对象的对象组件,selectedRelease。

The solution seems to be easy: just save (and flush whenever you want the changes be comunicated to the database) the Release objects before saving the Component. 解决方案似乎很简单:只需在保存组件之前保存(并在需要将更改通过数据库传递时刷新)Release对象。

However, JPA allows you to avoid all these sentences with TRANSITIVE PERSISTENCE, that is, the cascade options in the @...ToMany annotations. 但是,JPA允许您使用TRANSITIVE PERSISTENCE避免所有这些句子,即@ ToMany注释中的级联选项。

Just a warning in case you have a bidirectional relationship, when you have a mappedBy attribute in one of the @...ToMany associations. 如果您有一个双向关系,只需要一个警告,当您在其中一个@ ... ToMany关联中有一个mappedBy属性时。 In this case, you'll need a convenient method to manage the association, that is, to set both sides of the association. 在这种情况下,您需要一种方便的方法来管理关联,即设置关联的两侧。

For instance, an addRelease(Release r) in Component that both adds the release to the component's set, and sets the component (actually, the this instance) to the release passed as parameter. 例如,Component中的addRelease(Release r)都将发布添加到组件的集合中,并将组件(实际上, 实例)设置为作为参数传递的发布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 org.hibernate.TransientObjectException:object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例 - org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing 对象引用了一个未保存的瞬态实例-在刷新之前保存瞬态实例:Spring Data JPA - object references an unsaved transient instance - save the transient instance before flushing : Spring Data JPA 对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:com.entity.Role - object references an unsaved transient instance - save the transient instance before flushing: com.entity.Role 保存实体时JPA错误,对象引用了未保存的瞬态实例-在刷新之前保存瞬态实例 - JPA error while saving entity, object references an unsaved transient instance - save the transient instance before flushing JPA对象引用了未保存的瞬态实例-在刷新之前保存瞬态实例 - JPA object references an unsaved transient instance - save the transient instance before flushing TransientPropertyValueException:对象引用未保存的瞬态实例 - 在查询刷新之前保存瞬态实例 - TransientPropertyValueException: object references an unsaved transient instance - save the transient instance beforeQuery flushing 春季-休眠-org.hibernate.TransientObjectException:对象引用了一个未保存的临时实例 - spring - hibernate - org.hibernate.TransientObjectException: object references an unsaved transient instance 对象引用一个未保存的瞬态实例多个关系 - object references an unsaved transient instance multiple relations ManyToMany关系:刷新之前保存临时实例 - ManyToMany relation: save the transient instance before flushing object引用未保存的瞬态实例:如何刷新或返回保存的对象 - object references an unsaved transient instance: how to flush or return saved object
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM