java - 如何将 DTO 中的 ID 映射到实体上的类的 ID
问题描述
我正在尝试从具有 int 产品 ID 的 ProductReviewDTO 映射以链接到在 ProductReview 实体上找到的产品。但是使用 ModelMapper 似乎无法正确映射。导致设置值失败错误消息以及 IllegalArgument 异常,说明在尝试设置值时对象不是声明类的实例。
ProductReview 到 ProductReviewDTO 的第一个映射工作正常。
DTO:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductReviewDTO {
private int id;
private int productId;
}
实体:
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "product_reviews")
public class ProductReview {
@Id
@SequenceGenerator(name="product_reviews_generator", sequenceName = "product_reviews_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "product_reviews_generator")
@Column(name = "id", updatable = false, nullable = false)
private int id;
@ManyToOne(cascade=CascadeType.DETACH, fetch = FetchType.LAZY)
@JoinColumn(name = "product_id", nullable=false)
private Product product;
}
映射:
@NoArgsConstructor
public class ProductReviewMapping implements BaseMapping<ProductReview, ProductReviewDTO> {
@Override
public PropertyMap<ProductReview, ProductReviewDTO> MapFromSourceToTarget() {
return new PropertyMap<ProductReview, ProductReviewDTO>() {
protected void configure() {
map().setProductId(source.getProduct().getId());
map().setUserId(source.getUser().getId());
map().setRatingId(source.getRating().getId());
}
};
}
@Override
public PropertyMap<ProductReviewDTO, ProductReview> MapFromTargetToSource() {
return new PropertyMap<ProductReviewDTO, ProductReview>() {
protected void configure() {
map().setProduct(new Product().builder().id(source.getProductId()).build());
}
};
}
}
Caused by: org.modelmapper.MappingException: ModelMapper mapping errors:
1) Failed to set value '1' on com.pfex.ecom.library.common.entity.Product$ProductBuilder.id()
解决方案
推荐阅读
- python - 查找列表中 X 个数之和的所有连续索引
- macos - macOS:模拟鼠标事件仅在启动二进制文件时有效,而不是应用程序包
- c# - 如何在 Unity 中检查构建中有多少场景
- python - 从谷歌找到并点击创建新帐户按钮
- c++ - C++ 如何在文件系统路径中支持非 ASCII 字符需要在所有目标操作系统(Windows、Linux、Mac)上支持具有宽字符的路径
- javascript - 为单页应用刷新 Google Ads
- vim - 获取所有 vim 缓冲区,同时将我的窗口/缓冲区保持在同一个地方?
- javascript - 父/子进程或从 js 文件运行 npm 任务
- javascript - 动态站点再生 GatsbyJS
- c - C++ 到 Delphi dll 调用