我知道这个问题已经被问了很多次,但是我找不到一个适合我的答案。
我有两个实体在Spring Roo应用程序中,它们处于多对多关系中,Release和Component。
首先,我通过
selectedRelease = Release.findReleasesByReleaseNumberEquals(version).getSingleResult();
上述方法是由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;
}
然后,我创建了一个新的组件实例,并尝试将其分配给所选的发布版本。
Component component = new Component();
Set<Release> releases = new HashSet<Release>();
releases.add(selectedRelease);
component.setReleases(releases);
component.persist();
当我尝试执行persist()时,出现了以下异常:
TransientObjectException:对象引用未保存的瞬态实例 - 请在刷新之前保存瞬态实例:com.Release;
有没有人能提供关于这个问题的建议?
映射如下:
Release.java:
@ManyToMany(cascade = CascadeType.PERSIST, mappedBy = "releases")
private Set<Component> components = new HashSet<Component>();
Component.java
@ManyToMany(cascade=CascadeType.PERSIST)
private Set<Release> releases = new HashSet<Release>();