ManyToMany Relation обновляет таблицу доменов - PullRequest
0 голосов
/ 26 марта 2020

Итак, у меня есть отношение ManyToMany, отображаемое таким образом:

@ManyToMany(cascade = CascadeType.MERGE)
    @JoinTable( name = "post_category",
        joinColumns = @JoinColumn(name = "post_id"),
        inverseJoinColumns = @JoinColumn(name = "category_id")
    )
    private List<CategoryEntity> post_categories;

, а затем:

    @ManyToMany(mappedBy = "post_categories")
    private List<PostEntity> posts;

Отношение должно быть таким: enter image description here

Дело в том, что у меня есть посты, у которых есть категории, и эти категории находятся в таблице stati c, которую я не хочу менять никогда. Я только хочу изменить таблицу отношений. Когда я впервые сохраняю сообщение, оно работает, но когда я пытаюсь обновить сообщение, оно исправляет таблицу, которая должна иметь следующий формат: c: Метод обновления:

    public Post att(Post model, Integer id) throws ResponseStatusException {
        Optional<PostEntity> optionalEntity = repo.findById(id);

        if(!optionalEntity.isPresent()) {
            throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Post not found");
        }

        PostEntity entity = optionalEntity.get();
        entity.setPost_categories(((model.getPost_categories() != null) ? CategoryMapper.marshall(model.getPost_categories()) : entity.getPost_categories()));
        entity.setPost_author((model.getPost_author() != null) ? model.getPost_author() : entity.getPost_author());
        entity.setTitle((model.getTitle() != null) ? model.getTitle() : entity.getTitle());

        return PostMapper.unmarshall(repo.save(entity));    
    }

В порядке ли отношение? Что я делаю не так ??

Ссылка на github проекта здесь, https://github.com/moreiravictor/EspatodeAPI/tree/master/src/main/java/br/com/espatodea/espatodeAPI

1 Ответ

0 голосов
/ 26 марта 2020

После долгих поисков я обнаружил, что это проблема с cascadeType. Таким образом, чтобы решить эту проблему, вам нужно всего лишь изменить на REFRE SH:

@ManyToMany(cascade = CascadeType.REFRESH)
    @JoinTable( name = "post_category",
        joinColumns = @JoinColumn(name = "post_id"),
        inverseJoinColumns = @JoinColumn(name = "category_id")
    )
    private List<CategoryEntity> post_categories;

REFRE SH cascadeType позволяет вам вносить изменения только в отца отношения. Таким образом, ребенок (категории) никогда не изменится.

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