Я пытаюсь получить проекции на @query
в JPA с объединенными столбцами в качестве еще одного проекта.
Скажем, у меня есть 2 сущности: курс, и студент, и студент могут иметь много курсов ивнешний ключ находится на столе курса:
student(id, name, email, age, grade, uuid)
course(id, name, uuid, student_id)
И у меня есть такие прогнозы:
public interface CourseProjection {
UUID getUuid();
}
И,
public interface StudentProjection {
String getName();
String getEmail();
Set<CourseProjection> getCourses();
}
В сущности:
public class Student {
// other code
@OneToMany(mappedBy = "student")
private Set<Course> courses = new LinkedHashSet<>();
}
Мне нужно выполнить LIKE
поиск по нескольким столбцам, включая курс UUID.Мне тоже нужно, я тоже хочу нумерацию страниц.Итак, в хранилище я хочу сделать что-то вроде:
@Repository
interface StudentRepository extends JpaRepository<Student, UUID> {
@Query(
value = "SELECT * FROM student s LEFT JOIN courses c ON s.id =
c.student_id WHERE s.name LIKE %str% OR c.student_id::text LIKE %str%",
nativeQuery = true
)
Page<StudentProjection> findAllByKeyword(String keyword, Pageable pageable);
}
Я хочу, чтобы результат выглядел следующим образом:
[
{
name: John
email: johndoe@gmail.com
courses: [
"course_uuid_1",
"course_uuid_2"
]
}
{
...
}
]
Есть предложения о том, как этого добиться?