从List映射List时遇到问题。Entity的所有默认字段都映射良好。
ex((实体(字符串日期->(DTO(字符串日期
但是,"实体"中存在"联接对象"字段。
我们需要从这个物体场中提取数据,并重新绘制它。
在单个实体到单个DTO而不是列表到列表的情况下,这很容易实现。
@Mapping(target = ".", source = "user")
通过这种方式,我们能够将实体拥有的用户对象字段的所有字段映射到剩余的未映射字段。
但是,在列表上尝试同样的操作没有任何效果。
我应该使用哪种方法?
@Entity(name = "refund")
public class RefundEntity extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int refundId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private UserEntity user;
private int refundAmount;
}
和
public class AdminRefundUserDto {
@AllArgsConstructor
@Getter
public static class Response {
private int refundAmount;
private String marketName;
private String bizNumber;
private String bizUserName;
}
}
和
@Entity(name = "user")
public class UserEntity extends BaseEntity {
@Id
@GeneratedValue(generator = "uuid4")
@GenericGenerator(name = "uuid", strategy = "uuid4")
@Column(columnDefinition = "BINARY(16)")
private UUID userId;
private String userName;
private String password;
private String phoneNumber;
private String marketName;
private String bizUserName;
private String bizNumber;
}
我用了
@Mapping(target = ".", source = "refundList.user")
List<AdminRefundUserDto.Response> toDtoList(List<RefundEntity> refundList);
首先,使用返回TargetObject 的SourceObject参数为映射器创建一个方法
@Named("toResponseDto")
//add your mapping
AdminRefundUserDto.Response toResponseDto(RefundEntity refundEntity);
如果您有复杂的映射逻辑,还可以创建一个自定义方法来映射某个目标参数:请参阅带有MapStruct 的自定义映射器
然后添加一个IterableMapping
@IterableMapping(qualifiedByName = "toResponseDto")
List<AdminRefundUserDto.Response> toDtoList(List<RefundEntity> refundList);