1

エンティティに複数のマーカー インターフェイスと 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);

この機能はまだカバーされていません。何か不足していますか?

4

1 に答える 1

0

<T>はい、それはあなたのtoBaseEntityLongPrimaryKey()メソッドの型変数に関連する問題です。toBaseEntity()メソッドを参照するときなどに機能します。

このトラッカーで問題を開いていただけますか?ありがとう!

于 2015-12-11T22:20:16.507 に答える