Я знаю, что этот вопрос задавали много раз, но я не смог найти подходящий ответ.
У меня есть два объекта в приложении Spring Roo, которые находятся в отношениях «многие ко многим», «Выпуск» и «Компонент».
Сначала я получаю экземпляр существующего Release через
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;
У кого-нибудь есть совет по этой проблеме?
Отображения выглядят следующим образом:
Релиз.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>();