[英]ModelMapper & JPA: How to map DTO with id to Entity with oneToMany field
[英]How to map oneToMany using ModelMapper
我正在使用springBoot
,我想要 map 从父母到孩子的OneToMany
关系。 直接使用带有eager
获取的entity
我得到递归记录,因此,尝试使用ModelMapper
将DTO
映射到Entity
,但我无法弄清楚如何去做。 请假设getters
和setters
。
父母.java
@Entity
public class Parent {
@Id
private int parentId;
private String a;
@OneToMany(mappedBy = "parent")
private Set<Child> child;
孩子.java
@Entity
public class Child {
@Id
private int childId;
private String c;
@ManyToOne
@JoinColumn(name = "b")
private Parent parent;
我有使用findAll
方法的工作存储库和服务层。
ParentDto.java
public class ParentDto {
private String a;
private Set<Child> child;
父控制器.java
@RestController
public class ParentController {
@Autowired
private ModelMapper modelMapper;
@Autowired
private ParentService parentService;
@RequestMapping(method = RequestMethod.GET, value="/parents" )
public List<ParentDto> getParents() {
List<Parent> parents = parentService.getAll();
return parents.stream()
.map(x-> modelMapper.map(x, ParentDto.class))
.collect(Collectors.toList());
}
}
错误:尝试获取http://localhost:8080/parents
.
.
ModelMapper mapping errors: 1) Converter org.modelmapper.internal.converter.CollectionConverter@51381583 failed to convert java.util.Set to java.util.Set. 1 error
org.modelmapper.MappingException: ModelMapper mapping errors:
1) Converter org.modelmapper.internal.converter.CollectionConverter@51381583 failed to convert java.util.Set to java.util.Set.
1 error
at org.modelmapper.internal.Errors.throwMappingExceptionIfErrorsExist(Errors.java:380)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:80)
.
.
这与“N + 1”和“无限递归”问题无关,可能会在mapper中添加Conver方法; 使用ModelMapper映射Children https://amydegregorio.com/2018/10/03/mapping-children-with-模型映射器/
我建议“首选嵌套属性”。
http://modelmapper.org/user-manual/configuration
您需要在子实体中定义的父映射上使用 @JsonIgnore 注释。
有关更多信息,请参阅此文档 - https://fasterxml.github.io/jackson-annotations/javadoc/2.5/com/fasterxml/jackson/annotation/JsonIgnore.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.