Karte ein dto zu einer Entität abgerufen aus der Datenbank, wenn die Dto hat Id mit MapStruct

Ich bin mit MapStruct zu machen dto <-> entity mapping. Die gleichen Mapper werden verwendet, um erstellen und update Entitäten von dtos. Eine überprüfung der dto-id wird getan, um zu wissen, ob eine neue Person angelegt werden (id == null) oder sollte es abgerufen werden, aus der Datenbank (id != null) .

Ich bin tatsächlich mit MapperDecorator als workaround. Beispiel :

Mapper

@Mapper
@DecoratedWith(UserAccountDecorator.class)
public interface UserAccountMapper {

    UserAccountDto map(User user);

    User map(UserAccountDto dto);

    User map(UserAccountDto dto, @MappingTarget User user);
}

Decorator

public abstract class UserAccountDecorator implements UserAccountMapper {

    @Autowired
    @Qualifier("delegate")
    private UserAccountMapper delegate;

    @Autowired
    private UserRepository userRepository;

    @Override
    public User map(UserAccountDto dto) {
        if (dto == null) {
            return null;
        }

        User user = new User();
        if (dto.getId() != null) {
            user = userRepository.findOne(dto.getId());
        }

        return delegate.map(dto, user);
    }

}

Aber diese Lösung wird schwer aufgrund der Tatsache, dass ein Dekorator erstellt werden muss für jeden mapper.

Gibt es eine gute Lösung zu führen, dass ?


Ich bin mit :

  1. MapStruct : 1.1.0
Schreibe einen Kommentar