Дубликат "многие ко многим" в JPA - PullRequest
0 голосов
/ 14 июля 2020

У меня есть таблицы Tags, Blog и BlogTags. При использовании "многие ко многим" я бы хотел, чтобы в блоге было много тегов (в виде объектов с идентификатором, именем).

Во внешнем интерфейсе, когда я добавляю теги, они создаются только с именем и идентификатором null поэтому, когда я сохраняю блог, новый тег создается каждый раз, когда он автоматически увеличивает тег, я бы хотел, чтобы тег был объединен с блогом, если указанный тег уже существует. Идея состоит в том, чтобы я мог щелкнуть любой тег предоставления и получить все связанные с ним блоги.

Итак, объект, отправленный на бэкэнд, будет:

{id: null,
name: 'name'
,.....
tags: [{id: null, name: 'name},{id: null, name: 'name}]}

Любая помощь приветствуется.

@Data
@Entity
public class Tag {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToMany(mappedBy = "tags", fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
    private List<BlogPost> blogPosts;
}
public class BlogPost {

//other data

    @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST})
    @JoinTable(
            name = "blog_post_tag",
            joinColumns = {@JoinColumn(name = "blog_post_id")},
            inverseJoinColumns = {@JoinColumn(name = "tag_id")})
    private List<Tag> tags;
}

Ответы [ 2 ]

0 голосов
/ 23 июля 2020

Отсутствие идентификатора тега - нормальное поведение для регистрации.

Вы можете попробовать, что для меня является лучшим вариантом, загрузить главную таблицу, из которой вы получите идентификатор, если он уже существует, и с поиск (в зависимости от используемой технологии) в момент вставки пользователем тега check if. существует, чтобы загрузить идентификатор, получить сущность БД и установить связь сущности тега с сообщением

Или перед сохранением сущности выполнить итерацию публикации по всем тегам, выполняя запрос по тегу, чтобы узнать, существует ли он и назначить его.

По сути, это то же самое, но с первым вариантом мы делаем запрос только к БД

0 голосов
/ 17 июля 2020

Я выбрал @ElementCollection без аннотаций «многие ко многим», и он работает.

...