Spring Data JPA @OneToMany

时间:2018-12-17 10:59:23

标签: spring hibernate spring-mvc spring-data-jpa spring-data

我正在设计数据库模型:

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

2 个答案:

答案 0 :(得分:1)

不,您不会出现无休止循环。

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

在对微服务进行编程时,我总是使用EAGER(有限的上下文聚合)。对于整体而言,LAZY也许更明智。

答案 1 :(得分:0)

@ManyToOne的默认提取类型为EAGER。如果将其设置在@OneToMany上,则不会导致堆栈溢出。

这是一个好习惯吗?我不会说是,但是有时候您需要获取相关实体。但是我想说总是最好指定entity graph