【发布时间】:2025-12-19 06:35:06
【问题描述】:
我正在使用 JPA 和 Postgres db 编写服务。我有一个名为 Student 的班级:
public class Student {
@id
private String id;
private String firstName;
private String lastName;
@OneToMany(targetEntity = Phone.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "student_id", referencedColumnName = "id")
private Set<Phone> phones;
// Setter and Getter
}
还有一个电话类:
public class Phone {
@id
private String id;
private String number;
// Setter and Getter
}
现在我的数据库中将有两个表,以下是其中的列:
学生:id、first_name、last_name
电话:id、号码、student_id (由@JoinColumn 生成)
现在每次查询学生时,JPA 都会将电话表加入学生表,学生结果包含该学生的电话信息。这正是我想要的。
但现在我遇到了一个问题。当我查询学生列表时,电话信息在这种情况下没有用,只有 id、firstName 和 lastName 是必需的。但是 JPA 也为我做了同样的“加入”操作。我知道这会耗费大量时间。在这种情况下,我怎么能只返回学生表中的信息?不加入电话桌?
我在存储库中尝试了一些类似
@Query(SELECT s.id, s.firstName, s.lastName FROM student s)
public List<Student> findAllStudentWithoutPhone();
但它返回值列表,但未转换为 Student 对象。我怎样才能实现这个功能?
【问题讨论】:
标签: java postgresql jpa spring-boot