【发布时间】:2020-10-19 17:17:28
【问题描述】:
有没有办法配置模型映射器以自动将父 ID 映射到嵌套子对象中的父 ID?
父实体
@Entity
@Table(name = "parent")
public class ParentEntity {
@Id
@Column(name = "id")
private Long id;
@Basic
@Column(name = "name")
private String name;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id", referencedColumnName = "id")
private List<ChildEntity> child;
子实体
@Entity
@Table(name = "child")
public class ChildEntity {
@Id
@Column(name = "id")
private Long id;
@Basic
@Column(name = "parent_id")
private Long parentId;
@Basic
@Column(name = "name")
private String name;
父 DTO
public class ParentDto {
private Long id;
private String name;
private List<ChildDto> children;
子 DTO
public class ChildDto {
private Long id;
private Long parentId;
private String name;
目前我使用模型映射器,它的转换在大多数情况下都有效,它创建了一个包含 ChildEntity 对象列表的 ParentEntity 对象。现在我正在寻找一种方法来使用模型映射器填充每个 ChildEntity 中的“parentId”字段。提前致谢!
/*
{
id: 1,
name: "dad",
children: [
{
id:10,
name: "child",
},
{
id:20,
name: "child2",
}
]
}
*/
modelMapper.map(parentDto, ParentEntity.class)
【问题讨论】:
-
parent_id中的ChildEntity是否没有引用ParentEntity .id?如果是这样并且来自db,为什么需要自定义方法? -
@Aman parent_id in ChildEntity 正在引用 ParentEntity.id,但是当我使用 modelMapper.map 时,它不会使用父 ID 填充 ChildEntities 列表。我猜是因为字段名称不同(id vs parent_id)
-
不,他们不是。我的意思是,如果
ChildEntity.parentId像你说的那样来自数据库,映射应该不是问题。 -
@Aman 当我尝试将 parentDto 映射到 ParentEntity 时,嵌套的 ChildEntities 的 parentId 为空。转换有效,但我正在尝试对其进行配置,以便嵌套的 ChildEntities 使用 parentEntity 的 id 自动填充 parentId。我希望我是清楚的。
-
正确的方法是修复父子之间断开的链接。您可以编写
converter否则,它会为您提供映射上下文,以便您可以根据需要自定义映射。但是,随之而来的是不必要和无用的并发症。 modelmapper.org/user-manual/converters
标签: java modelmapper