Я пытаюсь сопоставить объект JPA (Recipe
), содержащий коллекцию различных Product
s с ассоциацией многие-ко-многим.
@Data
public class Recipe {
private String id;
//ManyToMany
private Set<Product> products;
}
@Data
public class Product {
private String id;
private String name;
//ManyToMany
private Set<Recipe> recipes;
}
Для результата меня интересуют только идентификаторы этих сущностей:
@Data
public class RecipeDTO {
private String id;
private Set<String> productIds;
}
Итак, это приводит к этому сопоставителю:
@Mapper
public interface RecipeMapper {
@Mapping(target = "productIds", source = "products.id")
RecipeDTO mapToDto(Recipe recipe);
}
Теперь это не работает:
RecipeMapper.java:8: error: No property named "products.id" exists in source parameter(s). Did you mean "products.empty"?
@Mapping(target = "productIds", source = "products.id")
^
Жаль. Я надеялся заставить его работать вот так, но имеет смысл, что это не работает. Моя следующая идея заключалась в том, чтобы определить метод для отображения Product
в String, извлекая его id
, возможно @Named
. Используется что-то вроде String mapToProductId(Product product)
, но для аннотации @Mapping
требуется target
, которым в данном случае будет сама строка (значение). Я не уверен, возможно ли это вообще, я просмотрел документацию, примеры, группу пользователей и Stackoverflow, но безрезультатно.
Итак, на данном этапе было бы проще чтобы реализовать все отображение Recipe
самостоятельно, но я не могу не чувствовать, что что-то упускаю. Есть ли лучший способ сделать это?