Spring数据延迟加载无法正常工作

时间:2018-02-05 02:39:35

标签: java hibernate jpa spring-boot spring-data

我有两个类似下面的实体:

@Entity
@DynamicUpdate    
public class EntityOne {
    @Id
    public long id;

    public String name;
    public String displayName;

    @JsonManagedReference
    @OneToMany(mappedBy = "id", cascade = CascadeType.ALL)
    @OrderBy(value = "name")
    public List<EntityTwo> entityTwoList;
}

实体二是

@Entity
@DynamicUpdate
public class EntityTwo {
    @Id
    public long id;

    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "id")
    public EntityOne entityOne;
}

服务: Lists.newArrayList(repository.findAll());

该服务调用CRUDRepository的findAll()方法。我不希望在调用findall()时加载实体两个对象的列表,但此解决方案不起作用。 我正在做什么不正确的懒惰加载集合。我基本上不希望在指定之前加载集合。

默认情况下,映射是延迟加载。

3 个答案:

答案 0 :(得分:1)

我假设杰克逊正在尝试加载您的子对象。

尝试followjackson-datatype-hibernate4:2.4.4 将jackson-datatype-hibernate4:2.4.4添加到您的依赖项并定义以下bean

@Bean
public Jackson2ObjectMapperBuilder configureObjectMapper() {
return new Jackson2ObjectMapperBuilder()
    .modulesToInstall(Hibernate4Module.class);
}

答案 1 :(得分:1)

我不知道杰克逊但是根据jpa规格,你不能强迫LAZY加载你也不能依赖它...你只是提供懒惰的负载提示,它完全取决于提供者懒惰加载它(不像EAGER,它强制加载)

答案 2 :(得分:0)

首先尝试这个,我认为你需要指定fetch类型lazy或Eager

   ManyToOne(fetch= FetchType.LAZY)