gpt4 book ai didi

java - 停止 Spring MVC 获取 LazyLoad 数据

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:10 25 4
gpt4 key购买 nike

使用 SpringBoot 1.5.15.BUILD-SNAPSHOT 以及 data-jpaspring-mvc(web) 以及 2 个实体创建了一个简单的 Spring Boot 项目。

父实体

@Entity
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;

@Column(name = "name")
private String name;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
private Collection<Child> children;

//Getter & Setter remove for brevity
}

子实体

@Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;

@Column(name = "name")
private String name;
}

每当调用获取所有Parent数据的端点时,也会返回子数据,但是,根据我的理解,默认 fetchType 是 LazyLoading。

以下 Spring Mvc 剩余代码用于获取数据

@RestController
@RequestMapping("test")
public class Controller {
@Autowired
ParentRepository parentRepository;

@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET)
public ResponseEntity<Collection<Parent>> findAll(HttpServletRequest request) {
List<Parent> parents = parentRepository.findAll();
return new ResponseEntity<>(parents, HttpStatus.OK);
}
}

预期的和应该发生的只是 Parent 数据,而不是子数据集合,应该在延迟加载时获取它们。

我怎样才能阻止这种总是急于加载子项的不良行为。

注意:我尝试将 fetchType 设置为 LazyLoad,但当我调用“/test”时,也会获取子数据

最佳答案

最后,我设法阻止 Jackson 善意地为我提取延迟加载的数据。

要做到这一点添加以下maven依赖

  <dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.9.6</version>
</dependency>

然后像这样子类ObjectMapper并根据您使用的hibernate版本注册hibernate模块。我使用的是Hibernate 5,所以我这样做了

public class HibernateAwareObjectMapper extends ObjectMapper {

public HibernateAwareObjectMapper() {
registerModule(new Hibernate5Module());
}
}

最后添加一个Bean

@Bean
public ObjectMapper objectMapper(){
return new HibernateAwareObjectMapper();
}

使用上述代码,延迟加载的属性不会自动初始化。

关于java - 停止 Spring MVC 获取 LazyLoad 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51266147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com