Сохранение ManyToMany - PullRequest
       3

Сохранение ManyToMany

0 голосов
/ 08 мая 2020

Итак, я хочу сохранить сущность, которая имеет отношение ManyToMany. Дело в том, что связанный объект может уже существовать, а может и не существовать. Чтобы привести пример, у меня есть статья:

@Entity
public class Article {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    @ManyToOne(cascade = CascadeType.ALL)
    private TagSet tagSet;
}

Каждая статья имеет набор тегов (вероятно, это может быть OneToOne)

@Entity
public class TagSet {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @ManyToMany(cascade = CascadeType.ALL)
    private List<Tag> tags;
}

Каждый набор тегов перекрестно сопоставлен с различными тегами

@Entity
public class Tag {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String tag;
}

Я бы хотел, чтобы я мог отправить sh запрос, в котором не указаны идентификаторы (все новые объекты), и он автоматически сгенерирует идентификаторы для всех (таким образом, GenerationType.IDENTITY и CascadeType .ALL).

Однако я также хотел бы иметь полезную нагрузку, которая определяет идентификаторы для объектов тега (повторно использованные ранее существующие теги), а затем перекрестно сопоставляет их с новым набором тегов, который создается для новой статьи . Текущая настройка приводит к отсоединению сущностей из-за того, что я устанавливаю идентификатор для сущности, которая предназначена для его создания. (Если это причина отсоединенной ошибки, я нахожу это сбивающим с толку, так как мне разрешили бы установить идентификатор для статьи, иначе вы не смогли бы сделать .save() для обновления существующей статьи, так почему бы и нет для связанных сущностей тегов?)

Это может быть даже тот случай, когда у меня есть запрос с некоторыми ранее определенными тегами и некоторыми новыми в одном запросе.

Я, конечно, мог бы сократить это up и сохранить эти объекты на отдельных этапах, но было бы предпочтительнее выполнить один вызов .save() для репо. Есть ли какая-то конфигурация, чтобы это работало?

Я также пробовал использовать настраиваемый генератор, чтобы использовать существующий идентификатор, если он присутствует, но это по-прежнему вызывает проблему с отсоединенным объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...