我将业务对象映射到实体,有时实体的结构与业务对象不同。
我有一个名为
我的方法(有效)是创建一个包装器,手动创建关系,但这看起来像在折腾:
我有一个名为
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
字段。