У меня проблема с самоотношениями 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 без удаления этих строк.
Любая помощь приветствуется!