我正在设计数据库模型:
@Entity
@Table(name="t_urna")
public class Urna implements Serializable {
@OneToMany(mappedBy = "urna",
cascade = CascadeType.ALL,
orphanRemoval = true, fetch = FetchType.EAGER)
@JsonIgnore
private Set<Vot> vots = new HashSet<>();
..
}
@Entity
@Table(name="t_vot")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Vot implements Serializable {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "urna_id")
@JsonIgnore
Urna urna;
}
我想知道是否在两个类中都设置FetchType.EAGER是否会导致问题,例如不断循环或某些stackoverflow ....这是否是一个好习惯
答案 0 :(得分:1)
不,您不会出现无休止循环。
我认为这个级别没有好的或坏的做法。有时最好使用LAZY,因为它会阻止您加载不需要的对象。有时最好使用EAGER,因为如果需要这些对象,它将阻止休眠运行多个请求。
在对微服务进行编程时,我总是使用EAGER(有限的上下文聚合)。对于整体而言,LAZY也许更明智。
答案 1 :(得分:0)
@ManyToOne
的默认提取类型为EAGER
。如果将其设置在@OneToMany
上,则不会导致堆栈溢出。
这是一个好习惯吗?我不会说是,但是有时候您需要获取相关实体。但是我想说总是最好指定entity graph