【问题标题】:FetchType LAZY not working for OneToMany assosiation with spring dataFetchType LAZY 不适用于与弹簧数据的一对多关联
【发布时间】:2019-02-16 14:47:37
【问题描述】:

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

@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 = "地址") 公共类地址 {

@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=respository.findById(id); 学生 s=optional.get();

这是执行两个sql,一个用于学生表,第二个用于地址表,以查找学生的关联地址。

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

正如我们提到的延迟加载它不应该触发第二个 excel。

【问题讨论】:

  • 在你的例子中我可以看到 FetchType.EAGER 你在哪里有 Lazy?
  • 如果我改变 LAZY 也没有效果。

标签: hibernate spring-data-jpa


【解决方案1】:

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

@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”属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2017-10-16
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多