我有两个类似下面的实体:
@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()时加载实体两个对象的列表,但此解决方案不起作用。 我正在做什么不正确的懒惰加载集合。我基本上不希望在指定之前加载集合。
默认情况下,映射是延迟加载。
答案 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)