Ну можно создать несколько DTO по аналогии с нужными сущностями из БД.
Например,
class User {
Role role;
}
class Role {
List<Privilege> privileges;
}
class UserDto {
RoleDto role;
}
class RoleDto {
List<PrivilegeDto> privileges;
}
Если названия совпадают, то мапперы смогут сковертировать Dto <--> Entity, в ином случае надо будет кастомизировать мапперы или добавить соответствующие аннотации. Можно взять тот же MapStruct || ModelMapper или использовать спринговый
Converter<>