FetchType LAZY不适用于与Spring数据的One To Many关联

问题描述 投票:0回答:1

我有两个实体学生和地址。我正在使用FetchType.LAZY。但是当我通过spring数据findById获取学生时,它会获取与student相关的地址列表。

@Table(name = "Student")

公立班学生{

@Column(name="name")
private String name;

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "STUDENT_ID")
@SequenceGenerator(name = "STUDENT_ID", sequenceName = "STUDENT_ID_SEQ")
@Column(name="STUDENT_ID")
 private Long id;


@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch = FetchType.LAZY)
@JoinColumn(name = "student_id")
private List<Address> address; 

}

@Table(name =“Address”)公共类地址{

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "ADDRESS_ID")
@SequenceGenerator(name = "ADDRESS_ID", sequenceName = "ADDRESS_ID_SEQ")
@Column(name="ADDRESS_ID")
private Long id;

private String desc;

}


可选optional = repository.findById(id);学生= optional.get();

这是为学生表执行两个sql,为地址表执行第二个以查找学生的相关地址。

理想情况下,学生应该只有学生数据,相关地址除外。

正如我们已经提到过Lazy加载它不应该触发第二个excel。

hibernate spring-data-jpa
1个回答
0
投票

我建议改变:公共班学生{

@Column(name =“name”)私有字符串名称;

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "STUDENT_ID")
@SequenceGenerator(name = "STUDENT_ID", sequenceName = "STUDENT_ID_SEQ")
@Column(name="STUDENT_ID")
 private Long id;


@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch = FetchType.LAZY,  mappedBy="student")
private List<Address> address; 
}

而且:

    @Table(name = "Address") public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "ADDRESS_ID")
    @SequenceGenerator(name = "ADDRESS_ID", sequenceName = "ADDRESS_ID_SEQ")
    @Column(name="ADDRESS_ID")
    private Long id;

    private String desc;

 @ManyToOne(fetch=FetchType.LAZY) 
     public Student student;
    }

@JoinColumn让@OneToMany负责协会,而不是最好的选择,尝试使用@OneToMany方面的“mappedBy”属性。

© www.soinside.com 2019 - 2024. All rights reserved.