【发布时间】:2020-07-25 09:40:58
【问题描述】:
首先,我有两个相关实体映射为双向 OneToMany:
@Data
@Entity
@Table(name = "tbl_parent")
public class Parent {
@Id
@Column(name = "parent_id")
private Long id;
...
@OneToMany(mappedBy = "parent")
private List<Child> children = new ArrayList<>();
}
和
@Data
@Entity
@Table(name = "tbl_child")
@ToString(exclude = "parent")
public class Child {
@Id
@Column(name = "child_id")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Parent parent;
}
但是,在序列化过程中发生无限循环时,我为父实体的 findAll() 方法使用 StackOverFlow。
然后我在 application.yml 中添加了属性:
spring:jsp:open-in-view: false
还有另一个序列化问题。为了解决它,我在 build.gradle 中添加了依赖项:
implementation "com.fasterxml.jackson.datatype:jackson-datatype-hibernate5"
及配置类:
@Configuration
public class JacksonConfiguration {
@Bean
public JavaTimeModule javaTimeModule() {
return new JavaTimeModule();
}
@Bean
public Jdk8Module jdk8TimeModule() {
return new Jdk8Module();
}
@Bean
public Hibernate5Module hibernate5Module() {
return new Hibernate5Module();
}
}
现在我没有错误,但父实体中的列表始终为空。
我做错了什么?如何在没有 StackOverflow 的情况下获取所有相关的子实体?
【问题讨论】:
-
你能显示你在数据库中的数据吗?你是如何查询他们的
-
我不确定为什么在这种情况下需要数据。我创建了接口ParentRepository extends JpaRepository
,只是普通情况 -
现在 sql 语句看起来像 select * from parent。正如我所说,它只是不获取相关的子实体。仅从父表中选择一项。
-
那么如果你从父表中选择,那你为什么期望子表出现呢?
-
当您在获取数据时遇到问题,您认为不需要数据?
标签: spring hibernate spring-data-jpa lombok