我需要有關 Hibernate 和 Postgresql 資料庫的 Java Spring Boot 專案中 HQL/JPQL 查詢的幫助。
主要物體是學生和課程(為簡潔起見,省略了額外的欄位和注釋)。
學生
持久物體:
@Entity
@Table(name = "student")
public class Student {
@Id
@Column(name = "id")
private UUID id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "lesson_id")
private Lesson lesson;
}
資料庫表:
create table student
(
id uuid,
lesson_id uuid
);
課程可以是存盤在資料庫中的uuid[]檔案中的不同課程周期的一部分。
持久物體:
@Entity
@Table(name = "lesson")
@TypeDefs({
@TypeDef(
name = "uuid-array",
typeClass = UUIDArrayType.class
)
})
public class Lesson {
@Id
@Column(name = "id")
private UUID id;
@Column(name = "name")
private String name;
@Type(type = "uuid-array")
@Column(
name = "lesson_cycle_ids",
columnDefinition = "uuid[]"
)
private List<UUID> lessonCycleIds;
}
資料庫表:
create table lesson
(
id uuid,
name varchar(1000),
lesson_cycle_ids uuid[]
);
我需要一種List<Student> getStudents(UUID lessonCycleId)回傳學生串列的方法,這些學生串列與提供的課程回圈 ID 的課程相關聯。
現在我在 JPA 存盤庫中使用了以下方法:
@Query("FROM Student s WHERE s.lesson IN (SELECT les FROM Lesson les WHERE :id MEMBER OF les.lessonCycleIds)")
List<Student> getStudents(@Param("id") UUID lessonCycleId);
但它不起作用。我在應用程式啟動時出現以下錯誤:
查詢方法 public abstract java.util.List ... StudentJpaRepository.getStudents(java.util.UUID) 的驗證失敗!
所以我需要幫助來解決查詢。
uj5u.com熱心網友回復:
我對 JPQL 不走運,所以最后我決定改用原生 Postgresql 查詢:
@Query(nativeQuery = true, value = "select * from student where lesson_id IN (select id from lesson where :id = ANY (lesson_cycle_ids))")
List<Student> getStudents(@NonNull @Param("id") UUID lessonCycleId);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/323650.html
標籤:爪哇 PostgreSQL 弹簧靴 休眠 知乎
