當通過第二個映射函數將映射信息明確地映射到Mapstruct時,爲什麼不自動生成映射代碼?將地圖平面對象映射到具有地圖構圖的組合對象
Flat Composed
---- --------
- String a - String a
- Sub
- String b - String b
- String c - String c
。
爲了清楚@Mapper(uses = SubToFlatMapper.class)
public interface ComposedToFlatMapper {
Flat map(Composed c); // Unmapped target properties: "b, c".
// Not OK because Sub mapping is defined in
// SubToFlatMapper and is used here :(
}
@Mapper
public interface SubToFlatMapper {
Flat map(Sub s); // Unmapped target properties: "a".
// (OK because 'a' is not in Sub)
}
用法:
Composed composed = new Composed();
Sub sub = new Sub();
composed.setA("A");
composed.setSub(sub);
sub.setB("B");
sub.setC("C");
Flat flat = ComposedToFlatMapper.INSTANCE.map(composed);
// flat.getA() is "A", OK!
// flat.getB() is null, unexpected, should be "B"
// flat.getC() also null, should be "C".
"B"
和"C"
未映射到flat
由於生成代碼不會創建,該方法。
我以爲我已經提供了所需的映射信息到生成器。當它看到Flat map(Sub s)
方法時,它應該在ComposedToFlatMapperImpl
內生成。
編輯:
之前我沒有提到這一點,但在原來的問題,我還可以使用update
- 方法這是更靈活。
現在,假設有一個新的Sub2
類型。 :
@Mapper(uses = {SubToFlatMapper.class, Sub2ToFlatMapper.class})
public interface ComposedToFlatMapper {
Flat map(Composed c);
void update(Composed source, @MappingTarget Flat target);
}
@Mapper
public interface SubToFlatMapper {
Flat map(Sub s);
void update(Sub source, @MappingTarget Flat target);
}
@Mapper
public interface Sub2ToFlatMapper {
Flat map(Sub2 s);
void update(Sub2 source, @MappingTarget Flat target);
}
。
Flat Composed
---- --------
- String a - String a
- Sub
- String b - String b
- String c - String c
- Sub2
- String d
- String e
由於Flat
沒有Sub2
引用只是忽略它。不需要生成映射代碼。
你的映射方法具有'Composed'作爲參數和'Flat'作爲目標;這是你實際上的意思,還是應該是相反的方式(如mapper類名所暗示的)? – Gunnar
我添加了用例 – aliopi
我修正了類名。我希望現在閱讀更好。 – aliopi