我正在尝试使用Hibernate开发Spring Rest API。在谷歌搜索后,我没有找到延迟加载的解决方案。我有两个实体,如下所示:
大学
@Entity() @Table(schema = "core", name = "university") public class University extends BaseEntity { private String uniName; private String uniTelephon; @LazyCollection(LazyCollectionOption.FALSE) @OneToMany(fetch = FetchType.LAZY, mappedBy = "university", cascade = CascadeType.ALL) @JsonManagedReference private List<Student> students; //setter and getter }
学生.java
@Entity @Table(schema = "core",name = "student") public class Student { @Id @GeneratedValue private long id; private String firstName; private String lastName; private String section; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "UNIVERSITY_ID",nullable = false) @JsonBackReference private University university; // setter and getter }
我休息的任何终点
@GetMapping("/list") public ResponseEntity list() throws Exception { // I need to return just Universities But it return it eagerly with their students return new ResponseEntity(this.universityService.findAll(), HttpStatus.OK); }
调用其余的api后,它将与所有学生一起返回大学。
有一种方法告诉杰克逊不要序列化未提取的对象或集合?
有人可以为我提供可靠的解决方案吗?
尝试添加以下依赖项(取决于您的hibernate版本):
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-hibernate5</artifactId> <version>${jackson.version}</version> </dependency>
然后(假设您具有基于Java的配置)在WebMvcConfigurerAdapter类中添加以下内容:
@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(jackson2HttpMessageConverter()); } @Bean public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(this.jacksonBuilder().build()); return converter; } public Jackson2ObjectMapperBuilder jacksonBuilder() { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); Hibernate5Module hibernateModule = new Hibernate5Module(); hibernateModule.configure(Feature.FORCE_LAZY_LOADING, false); builder.modules(hibernateModule); // Spring MVC default Objectmapper configuration builder.featuresToDisable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); builder.featuresToDisable(MapperFeature.DEFAULT_VIEW_INCLUSION); return builder; }
它应该强制Jackson的objectMapper不获取延迟加载的值。