Spring Boot Data Repository, который отображается из уровня персистентности на уровень приложения - PullRequest
0 голосов
/ 27 января 2020

В моей службе Spring Boot представление данных, используемое в моей базе данных (уровень постоянства), отличается от представления, используемого в моей логике приложения c.

В настоящее время у меня есть уровень служб между хранилищем layer и уровень бизнес-логики c, который обрабатывает сопоставление между уровнем персистентности и представлениями уровня домена.

Предоставляет ли Spring способ автоматической обработки этого на уровне хранилища? Преобразование - это просто два метода stati c, которые берут объект и возвращают его в другом представлении.

Вот краткий пример моих слоев и моего текущего решения. Я не могу опубликовать фактический код, но это демонстрирует проблему. Я не могу изменить свои представления данных или код отображения:

@Service
public class UserService{
    @Autowired UserMapper mapper;
    @Autowired UserRepository repository;

    public UserEntity someServiceMethod(UserEntity entity){
        entity.setName("Billy");
        final Function<UserEntity, UserEntity> mapped = 
            mapper.mapped((dbUser -> repository.save(dbUser)));
        return mapped.apply(entity);
    }
}

@Service
public class UserMapper{
    private final Function<DbUser, UserEntity> toApplication = /*...*/;
    private final Function<UserEntity, DbUser> toPersistence = /*...*/;

    public Function<UserEntity, UserEntity> mapped(Function<DbUser, DbUser> func){
        return toPersistence.andThen(func).andThen(toApplication);
    }

    // + many more to deal with lists, no-argument repository methods etc.
}

@Repository public interface UserRepository extends CrudRepository<DBUser, Long>{}

В идеале я хотел бы просто иметь возможность сделать что-то вроде

@Repository public interface UserRepository extends CrudMappingRepository<DBUser, UserEntity, Long>{
    @Override protected final Function<DbUser, UserEntity> toApplication = /*...*/;
    @Override protected final Function<UserEntity, DbUser> toPersistence = /*...*/;
}
...