Не удается преобразовать запрос MySql (отношение ManyToMany) в HQL - PullRequest
0 голосов
/ 21 июня 2020

Есть 3 объекта: 1) Вопрос, 2) Тег и таблица соединения между ними - Question_Has_Tag

Те же объекты в java, за исключением таблицы соединения. Вместо него:

public class Question {
  //
  @ManyToMany(fetch = FetchType.LAZY)
  @JoinTable(name = "question_has_tag",
        joinColumns = @JoinColumn(name = "question_id"),
        inverseJoinColumns = @JoinColumn(name = "tag_id"))
  private List<Tag> tags;

public class Tag {
  //
  @ManyToMany(mappedBy = "tags", fetch = FetchType.LAZY)
  @ContainedIn
  private List<Question> questions;

Запрос для преобразования:

select * from question as q
   join question_has_tag as qht on q.id = qht.question_id
   where qht.question_id in (select question_id from question_has_tag where tag_id = 1);

Я путаю таблицу соединения и коллекции. При преобразовании одного в другой

Если вам понадобится больше кода или информации, сообщите мне

1 Ответ

0 голосов
/ 21 июня 2020

Попробуйте это:

@Entity
public class Question {
    @ManyToMany(mappedBy = "question_has_tag", fetch = FetchType.LAZY)
    private List<Tag> tags;
}

@Entity
public class Tag {
    @ManyToMany(targetEntity = Question.class, fetch = FetchType.LAZY)
    private List<Question> questions;
}

И репозиторий для результатов запроса:

@Repository
public interface QuestionRepository extends JpaRepository<Question, Integer> {
  @Query("select q from Question q join Tag t where q.id in (:ids)")
  public List<Question> getQuestionsById(@Param("ids") List<Integer> ids);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...