【发布时间】:2020-08-23 11:39:05
【问题描述】:
关于 mapStruct 的问题。我有从基础实体扩展类但不知道如何映射它的情况。这是我的情况。
基础实体:
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id")
private Long id;
}
BaseDto:
public class BaseDto {
private Long id;
}
用户实体:
public class User extends BaseEntity {
private String name;
private String lastName;
private String username;
private String password;
private String profilePicturePath;
}
UserDto:
public class UserDto extends BaseDto {
private String name;
private String lastName;
private String username;
private String password;
private String profilePicturePath;
}
而mapper是这样的:
@Mapper(uses = {BaseMapper.class})
public interface UserMapper {
User userDtoToUser(UserDto userDto);
UserDto userToUserDto(User user);
}
BaseMapper:
@Mapper
public interface BaseMapper {
BaseEntity dtoToEntity(BaseDto baseDto);
BaseDto entityToDto(BaseEntity baseEntity);
}
问题是我没有映射 ID 属性。
感谢您的宝贵时间。
编辑:
没有显示错误,在映射器实现(生成的代码)中没有该 ID 的映射:
@Override
public User userDtoToUser(UserDto userDto) {
if ( userDto == null ) {
return null;
}
UserBuilder user = User.builder();
user.name( userDto.getName() );
user.lastName( userDto.getLastName() );
user.username( userDto.getUsername() );
user.password( userDto.getPassword() );
user.profilePicturePath( userDto.getProfilePicturePath() );
return user.build();
}
【问题讨论】:
-
嘿鬼猫。我已对原始问题添加了编辑。没有显示任何错误,我看到实现缺少 ID 映射,并且当我运行程序时,我在 UserDto 对象中,ID 为空。
-
你怎么称呼这个映射器?
-
它在课堂上是自动装配的,我像这样调用它 return userMapper.userToUserDto(savedUser);其中保存的用户是用户对象
-
你可以为 builder 添加代码吗?你在用龙目岛吗?
-
是的,我正在使用 lombok。并且我在 pom 中添加了必要的配置,所以 mapstruct 和 lombok 可以一起玩。还有一件事,在生成的代码中,我看到基本映射器像这样自动装配@Autowired private BaseMapper baseMapper;