エンティティに複数のマーカー インターフェイスと MappedSuperclass-es があり、共有構成を作成して、エンティティ固有のターゲットを無視したいと考えています。
サンプル インターフェイスとクラス:
public interface LongPrimaryKey extends Serializable
public abstract class FeatureBaseEntity extends BaseEntity
public class MyEntity extends FeatureBaseEntity implements LongPrimaryKey
MapperConfig インターフェイスで次のことを行います。
@MapperConfig(
unmappedTargetPolicy = ReportingPolicy.ERROR,
mappingInheritanceStrategy = MappingInheritanceStrategy.AUTO_INHERIT_FROM_CONFIG
)
public interface CentralConfig {
@Mapping(target = "id", ignore = true)
LongPrimaryKey toLongPrimaryKey(Model model);
@Mappings({
@Mapping(target = "createdAt", ignore = true),
@Mapping(target = "modifiedAt", ignore = true)
})
BaseEntity toBaseEntity(Model model);
@Mappings({
@Mapping(target = "createdAt", ignore = true),
@Mapping(target = "modifiedAt", ignore = true),
@Mapping(target = "id", ignore = true)
})
<T extends BaseEntity & LongPrimaryKey> T toBaseEntityLongPrimaryKey(Model model);
}
@Mapper(config = CentralConfig.class)
public interface MyEntityMapper {
@Mappings({
@Mapping(...)
})
@InheritConfiguration(name = "toBaseEntityLongPrimaryKey")
MyEntity toMyEntity(MyFeatureModel myFeatureModel, @MappingTarget MyEntity entity);
}
これは以下をスローします:
[DEBUG] diagnostic MyEntityMapper.java:28: error: None of the candidates toLongPrimaryKey(), toBaseEntity() matches given name: "toBaseEntityLongPrimaryKey".
@InheritConfiguration(name = "toBaseEntityLongPrimaryKey")
^
[DEBUG] diagnostic MyEntityMapper.java:29: error: More than one configuration prototype method is applicable.
Use @InheritConfiguration to select one of them explicitly: LongPrimaryKey toLongPrimaryKey(Model model), BaseEntity toBaseEntity(Model model).
MyEntity toMyEntity(MyFeatureModel myFeatureModel, @MappingTarget MyEntity entity);
この機能はまだカバーされていません。何か不足していますか?