Hibernate автоматически выполняет запрос DELETE для отношения ManyToMany при выполнении SELECT - PullRequest
0 голосов
/ 01 октября 2019

У меня проблема с самоотношениями ManytoMany. Когда я проверяю, существует ли связь между двумя тегами, Hibernate очищает отношение, выполняющее УДАЛЕНИЕ.

Я пытался изменить LAZY на EAGER и добавить или удалить «relatedTagsOf» с инвертированными именами столбцов, но это не решило мою проблему. Я также пытался изменить выбор с помощью выборочного соединения.

Это сущность:

@Entity
public class Tag {

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

    private String code;
    private String name;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "tag_related_tags",
            joinColumns = @JoinColumn(name = "relatedTagId"),
            inverseJoinColumns = @JoinColumn(name = "tagId")
    )
    private Set<Tag> relatedTags = new HashSet<>();


    @ManyToMany(mappedBy = "tags", fetch = FetchType.LAZY)
    private Set<Item> items = new HashSet<>();
...
}

И это запрос:

@Query(value = "SELECT COUNT(*) > 0 
                FROM tag_related_tags trt 
                WHERE (trt.tag_id = :masterTagId AND trt.related_tag_id = :relatedTagId) 
                   OR (trt.related_tag_id = :relatedTagId AND trt.tag_id = :masterTagId)"
      , nativeQuery = true)

Integer existRelation(@Param("masterTagId") Long masterTagId, 
                      @Param("relatedTagId") Long relatedTagId);

Если у меня есть2 строки в таблице "tag_related_tags", например так:

+------------------------+
|related_tag_id | tag_id |
+------------------------+
|1458           | 1459   |
|1459           | 1458   |
+------------------------+

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

ЧтоМне нужно выполнить инструкцию SELECT без удаления этих строк.

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

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