如何解决ModelMapper映射错误的ID
将dto映射到带有嵌套对象的实体时遇到问题。 基本上,“ DayEntry”包含许多“ SingleEntry”,每个“ SingleEntry”都有一个“ Category”。 这是我的实体:
@Entity
public @Data class SingleEntry {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id ;
private float value ;
private boolean isInEntry= true;
@ManyToOne
@JoinColumn(nullable=false)
private Category category;
@ManyToOne
@JoinColumn(nullable=false)
private DayEntry dayEntry;
}
@Entity
public @Data class Category {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id;
@Column(unique = true)
private String name;
private String color ="cc8282";
@OnetoMany(mappedBy = "category")
//@JsonManagedReference
private List<SingleEntry> singleEntryList;
}
@Entity
public @Data class DayEntry {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id;
@Column(nullable = false)
private LocalDate date;
@OnetoMany(mappedBy = "dayEntry",cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private List<SingleEntry> singleEntryList;
}
这是我正在使用的Dto:
public @Data class SingleEntryForCreationDto {
private float value ;
private boolean isInEntry;
private int categoryId;
private int dayEntryId;
}
我正在尝试创建一个新的“ SingleEntity”,这就是为什么在dto中没有“ id”的原因,因为它将要生成,但是当我使用模型映射器时:
modelmapper.map(singleEntryForCreationDto,SingleEntry.class)
它将“ categoryId”映射到实体“ SingleEntry”的“ id”字段,如您在日志示例中所见:
********* dto == SingleEntryForCreationDto(value=50.0,isInEntry=false,categoryId=2,dayEntryId=1)
********* mapped dto == SingleEntry(id=2,value=50.0,category=Category(id=2,name=null,color=cc8282,singleEntryList=null),dayEntry=DayEntry(id=1,date=null,singleEntryList=null))
我查看了modelmapper的文档,并试图更改NamingConventions和Transormation配置,但这没有帮助。我一定会丢失一些东西,而且我肯定不了解modelmapper的工作原理,因为我无法自行修复它。
我将不胜感激。
******编辑: 我仍然不明白为什么将categoryId(SingleEntryForCreationDto)映射到id(SingleEntry)。我现在以这种方式解决了
modelmapper.typeMap(SingleEntryForCreationDto.class,SingleEntry.class).addMappings(mapper -> mapper.skip(SingleEntry::setId));
解决方法
我找不到为什么您的配置会设置SingleEntry的id 2的值,但我认为您最好使用显式映射。
您可以使用PropertyMap配置跳过目标中的任何字段。
显式映射示例:不跳过,但map() http://modelmapper.org/javadoc/org/modelmapper/PropertyMap.html
您可以在此链接的“跳过属性”部分中找到如何使用skip()。 https://docs.docker.com/engine/reference/commandline/history/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。