Я знаю, что этот вопрос задавался много раз, но я не смог найти подходящий ответ для меня.
У меня есть две сущности в 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 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>();