У меня возникла проблема при сохранении bean-компонента, содержащего другие сопоставленные bean-компоненты (многие-ко-многим). В журналах я получаю «транзакция JDB C, помеченная только для отката». Бобы Childs (те, которые помечены как mappedBy) сохраняются без проблем. При сохранении новостного бина мне нравится сохранять / обновлять теги mappedBy и авторов.
Отображение в дочернем классе автора:
@ManyToMany(mappedBy = "authors", fetch = FetchType.EAGER,
cascade = {CascadeType.MERGE, CascadeType.PERSIST})
private Set<NewsModel> news = new HashSet<>();
Отображение в дочернем классе тега:
@JsonIgnore
@ManyToMany(mappedBy = "tags", fetch = FetchType.EAGER)
private Set<NewsModel> news = new HashSet<>();
Отображение в классе новостей.
@ManyToMany(fetch = FetchType.EAGER,
cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinTable(
name = "news_tag",
joinColumns = @JoinColumn(name = "news_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "tag_id", referencedColumnName = "id")
)
private Set<TagModel> tags = new HashSet<>();
@ManyToMany(fetch = FetchType.EAGER,
cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinTable(
name = "news_author",
joinColumns = @JoinColumn(name = "news_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "author_id", referencedColumnName = "id")
)
private Set<AuthorModel> authors = new HashSet<>();
Способ, которым я сохраняюсь:
@Override
public NewsModel add(NewsModel newsModel) {
entityManager.persist(newsModel);
return newsModel;
}
PS Сервисный метод, из которого вызывается perist, помечается как @ Transactional
Трассировка стека из журналы:
Заранее благодарю за внимание!