0

我正在设计数据库的模型:

@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 ......如果这是一个好习惯

4

2 回答 2

1

不,你不会有一个永无止境的循环。

我认为在这个级别上没有好的或坏的做法。有时最好使用 LAZY,因为它会阻止您加载不需要的对象。有时最好使用 EAGER,因为如果您需要对象,它会阻止 hibernate 运行多个请求。

在编写微服务时,我总是使用 EAGER(和有界上下文聚合)。对于单体来说,也许 LAZY 更明智。

于 2018-12-17T11:05:17.353 回答
0

无论如何,默认获取类型@ManyToOne是。EAGER如果你将它设置在@OneToMany它不应该以堆栈溢出结束。

如果这是一个好习惯?我不会说是,但有时您还需要获取相关实体。但我会说指定实体图总是更好

于 2018-12-17T11:04:15.033 回答