Map结构映射器不添加多到一列进行映射



对于我的spring-boot应用程序,我想将DTO列转换为实体对象,因此我使用mapstruct mapper类。但它不是转换我的ManyToOne列到实体对象。怎么加呢下面是我的实体类

@Entity(name = "favorite_rooms")
@Data
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class Favorite {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_fav_id")
@SequenceGenerator(name = "seq_fav_id")
Long id;
@ManyToOne
@JoinColumn(name = "animal_id")
Animal animal;
@ManyToOne
@JoinColumn(name = "room_id")
@ToString.Exclude
@EqualsAndHashCode.Exclude
Room rooms;
}

在mapper类 生成的代码下面的

public List<Favorite> favoriteDtosToFavorite(Set<FavoriteDto> favoriteRooms) {
if (favoriteRooms == null) {
return null;
} else {
List<Favorite> list = new ArrayList(favoriteRooms.size());
Iterator var3 = favoriteRooms.iterator();
while(var3.hasNext()) {
FavoriteDto favoriteDto = (FavoriteDto)var3.next();
list.add(this.favoriteDtoToFavorite(favoriteDto));
}
return list;
}
}
protected Favorite favoriteDtoToFavorite(FavoriteDto favoriteDto) {
if (favoriteDto == null) {
return null;
} else {
Favorite favorite = new Favorite();
favorite.setId(favoriteDto.getId());
return favorite;
}
}

,因为我看到它没有添加我的动物和房间数据有谁能告诉我怎么添加吗?

指定每个子对象的映射方法。看到文档。

@Mapper
public interface FavoriteMapper {
FavoriteMapper INSTANCE = Mappers.getMapper(FavoriteMapper.class);
@Mapping(target = "id", source = "id")
Favorite mapFavorite(FavoriteDTO favoriteDTO);
@Mapping(target = "id", source = "id")
@Mapping(target = "name", source = "name")
Animal mapAnimal(AnimalDTO animalDTO);
@Mapping(target = "id", source = "id")
@Mapping(target = "name", source = "name")
Room mapRoom(RoomDTO animalDTO);
List<Favorite> favoriteDtosToFavorite(Set<FavoriteDTO> favoriteDTOSet);
}

生成的代码:

public class FavoriteMapperImpl implements FavoriteMapper {
@Override
public Favorite mapFavorite(FavoriteDTO favoriteDTO) {
if ( favoriteDTO == null ) {
return null;
}
Favorite favorite = new Favorite();
favorite.setId( favoriteDTO.getId() );
favorite.setAnimal( mapAnimal( favoriteDTO.getAnimal() ) );
favorite.setRooms( mapRoom( favoriteDTO.getRooms() ) );
return favorite;
}
@Override
public Animal mapAnimal(AnimalDTO animalDTO) {
if ( animalDTO == null ) {
return null;
}
Animal animal = new Animal();
animal.setId( animalDTO.getId() );
animal.setName( animalDTO.getName() );
return animal;
}
@Override
public Room mapRoom(RoomDTO animalDTO) {
if ( animalDTO == null ) {
return null;
}
Room room = new Room();
room.setId( animalDTO.getId() );
room.setName( animalDTO.getName() );
return room;
}
@Override
public List<Favorite> favoriteDtosToFavorite(Set<FavoriteDTO> favoriteDTOSet) {
if ( favoriteDTOSet == null ) {
return null;
}
List<Favorite> list = new ArrayList<Favorite>( favoriteDTOSet.size() );
for ( FavoriteDTO favoriteDTO : favoriteDTOSet ) {
list.add( mapFavorite( favoriteDTO ) );
}
return list;
}
}

DTO使用:

@Data
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class FavoriteDTO {
Long id;
AnimalDTO animal;
RoomDTO rooms;
}
@Data
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class AnimalDTO {
Long id;
String name;
}
@Data
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class RoomDTO {
Long id;
String name;
}

实体使用:

@Entity(name = "favorite_rooms")
@Data
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class Favorite {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_fav_id")
@SequenceGenerator(name = "seq_fav_id")
Long id;
@ManyToOne
@JoinColumn(name = "animal_id")
Animal animal;
@ManyToOne
@JoinColumn(name = "room_id")
@ToString.Exclude
@EqualsAndHashCode.Exclude
Room rooms;
}
@Entity(name = "favorite_animal")
@Data
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class Animal {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_fav_id")
@SequenceGenerator(name = "seq_fav_id")
Long id;
String name;
}
@Entity(name = "favorite_room")
@Data
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class Room {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_fav_id")
@SequenceGenerator(name = "seq_fav_id")
Long id;
String name;
}

最新更新