CriteriaQuery: объединить две несвязанные сущности - PullRequest
0 голосов
/ 31 марта 2020

пытаюсь объединить две не связанные между собой сущности Студент, Книги. Студент может иметь список. Мне нужно объединить эти две сущности и выполнить поиск по полю Book.name с помощью CriteriaBuilder.

Что я пробовал: Я создал третью сущность StudentView

@Entity
@Table("Student")
class StudentView
{
  @Id
  String id;

  @Embedded
  @JsonUnwrapped
  private StudentEmbedded studentEmbedded;

  @oneToMany(cascadetype=all, mappedBy="bookId")
  private List<Books> books = new ArrayList<>();

  StudentView(Student student, Book book)
  {
    this.id=student.getId;
    this.studentEmbedded = student.getStudentEmbedded;
    this.books.add(book);

  }
}

@Entity
@Table("Student")
class Student
{
  @Id
  String id;
  @Embedded
  StudentEmbedded studentEmbedded;
}

@Entity
@Table("Books")
class Book
{
  @Id
  String id;
  @Column(Book_Id)
  String bookId;

  String bookName;
}

Я создал ListJoin с JoinType.LEFT для StudentView и Book Root<StudentView> studentRoot = something ListJoin<StudentView, Book> join = studentRoot.joinList("books", JoinType.LEFT); join.on(provided predicate-works fine till this point) .where(criteriabuilder.like(join.get("bookName"), "Hibernate")

только в том случае, когда условие создает проблему. Я не могу выполнить поиск по Book.bookName с указанным выше кодом. Пожалуйста, ввод будет оценен

...