在使用映射关系时我们可以在主表或从表设置关联关系就可以将这个两个表关联起来,查询或者做其他操作时,只需要查询主表就可以将从表信息附带出来,非常方便,简洁。但是相对应的问题就是,我只需要单独查询其中一个表时,它会将关联表信息给查询出来,一旦关联数据量很多,而我此时又不需要从表的数据,这样效率会大打折扣,请问各位大神有什么好的方法在我需要关联时就关联查询,不需要关联时,可以不关联查询?求指导?
public class Class{
@Id
private String id;
@Size(max = 20)
@Column(unique = true)
private String code;
@Size(max = 200)
private String name;
...
}
public class Student{
@Id
private String id;
@Size(max = 20)
private String code;
@Size(max = 200)
private String name;
@ManyToOne
private Class class;
...
}
百度了一下说在Student表的setClass上添加注解@JsonBackReference,可以防止数据转换json时,出现无限循环包含对方
@JsonBackReference
public void setClass(Class class) {
this.class= class;
}
在@OneToOne, @OneToMany, @ManyToOne中有一个属性是fetch。可以设置两个值,一个是LAZY,一个是EAGER。
如果是EAGER,那么表示取出这条数据时,它关联的数据也同时取出放入内存中。
如果是LAZY,那么取出这条数据时,它关联的数据并不取出来,在同一个session中,什么时候要用,就什么时候取(再次访问数据库)。
OneToMany默认是LAZY,其他都默认是EAGER。