【发布时间】:2015-08-09 17:59:41
【问题描述】:
我将业务对象映射到实体,但在某些情况下,实体的结构与业务对象不同。
我有userCategories,它们以字符串形式存储在业务对象RecipeBo 中,因为BO 不必了解实体的内部结构。这些字符串需要映射到Recipe和RecipeUserCategoryRel的关系,除此之外,RecipeBo的另一个字段userId也需要映射到这个RecipeUserCategoryRel中。
我的方法(可行)是创建一个包装器并手动手动创建关系,但这看起来像是在修修补补:
public class BoMapper
{
private final static ModelMapper modelMapper = new ModelMapper();
static
{
modelMapper.addMappings(new IngredientMap());
}
public static void map(Object from, Object to)
{
modelMapper.map(from, to);
if (from instanceof RecipeBo && to instanceof Recipe)
{
RecipeBo recipeBo = (RecipeBo)from;
List<String> userCategories = recipeBo.getUserCategories();
List<RecipeUserCategoryRel> recipeUserCategoryRels = new ArrayList<>();
for (String userCategory : userCategories)
{
recipeUserCategoryRels.add(new RecipeUserCategoryRel(userCategory, recipeBo.getUserId()));
}
Recipe recipe = (Recipe)to;
recipe.setRecipeUserCategoryRels(recipeUserCategoryRels);
}
}
}
我在 BoMapper 中所做的事情是否有更好的方法,例如使用转换器什么的?困难在于映射列表的每个元素并添加userId 字段。
【问题讨论】:
标签: java mapping modelmapper