【发布时间】:2021-12-04 06:50:16
【问题描述】:
我需要在 Java Spring Boot 项目中使用 Hibernate 和 Postgresql 数据库进行 HQL/JPQL 查询方面的帮助。
主要实体是Student和Lesson(为简洁起见,省略了额外的字段和注释)。
学生
持久实体:
@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) 的查询验证失败!
所以我需要帮助来修复查询。
【问题讨论】:
-
试试这个查询,
select s from student s where s.lesson in (select les FROM Lesson les where les.lessonCycleId = :lessonCycleId) -
@VenkateshK 这是一个课程周期ID(实体中的列表和数据库中的数组),而不是单个值
标签: java postgresql spring-boot hibernate jpql