【发布时间】:2012-03-21 21:20:08
【问题描述】:
我知道这个问题已经被问过很多次了,但我找不到适合我的答案。
我在 Spring Roo 应用程序中有两个实体,它们处于多对多关系、发布和组件中。
首先我通过
获取现有版本的实例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 实例并尝试将其分配给选定的 Release
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>();
组件.java
@ManyToMany(cascade=CascadeType.PERSIST)
private Set<Release> releases = new HashSet<Release>();
【问题讨论】:
-
你能发布你的Release和Component的映射吗?
-
我通过在 setReleases() 之前执行 persist() 解决了这个问题
标签: spring hibernate jpa spring-roo