不连接子表的java JPA(@OneToMany)查询
我在为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
}
现在,my db中将有两个表,其中有以下列:
学生:身份证,名,姓
电话:id,号码,学生id(由@JoinColumn生成)
现在每次我查询学生时,JPA都会将电话表加入学生表,学生结果包含该学生的电话信息。这正是我想要的
但现在我遇到了一个问题。当我查询学生名单时,电话信息在这种情况下并不有用,只需要id、名字和姓氏。但JPA也为我做同样的“加入”操作。我知道这会耗费很多时间。在这种情况下,我如何才能返回学生表中的信息?不参加电话会议
我在存储库中尝试了一些东西,比如
@Query(SELECT s.id, s.firstName, s.lastName FROM student s)
public List<Student> findAllStudentWithoutPhone();
但它会返回值列表,但不会转换为Student对象。我怎样才能实现这个功能
# 1 楼答案
在一对多映射(见下文)中,您将fetch类型设置为lazyfetch=FetchType。LAZY因此,在通过getter方法访问手机集之前,hibernate不会获取与该学生对应的手机集,因此无需担心
但是,如果需要验证工作是否正常,可以将属性show_sql设置为true,并检查通过hibernate生成的sql