У меня есть две сущности и две соответствующие таблицы в БД
public class Book {
private int id;
private int authorId;
private String title;
private int year;
// getter setter;
}
public class Author {
private int id;
private String firstName;
private String lastName;
// getter setter;
}
Мне нужно отправить в RestController список следующих DTO (Список книг)
public class BookDto {
private int id;
private AuthorDTO author;
private String title;
private int year;
// getter setter;
}
Соответственно, мне нужен следующий DTO
public class AuthorDTO {
private int id;
private String firstName;
private String lastName;
// getter setter;
}
Где и как я могу объединить эти два DTO? Для получения данных из БД я использую JdbcTemplate. И у меня есть методы getAuthorById (вернуть автора), getAuthorsByIds (вернуть список), getBookById (вернуть книгу), getBooksByIds (вернуть список).
Теперь я создаю промежуточный класс
public class BookWithAuthor {
private int id;
private Author author;
private String title;
private int year;
// getter setter;
}
и далее logi c в обслуживании
List<BookWithAuthor> getBooksWithAuthors(Set<Integer> ids) {
List<Book> books = getBooksByIds(ids);
List<Author> authors = getAuthors(books);
return books.stream()
.map(book -> getBooksWithAuthors(book, authors)
.collect(Collectors.toList());
}
private List<Author> getAuthors(List<Books> books) {
Set<Integer> getAuthorsIds = books.stream()
.map(Books::getAuthorId)
.collect(toSet());
return authorService.getAuthorsByIds(getAuthorsIds );
}
private BookWithAuthor getBooksWithAuthors(Book book, List<Author> authors) {
BookWithAuthor bookWithAuthor= new BookWithAuthor();
bookWithAuthor.setId(book.getId());
bookWithAuthor.setAuthor(getAuthor(authors, book.getAuthorId()));
// and next setting
return bookWithAuthor;
}
Я не уверен, что это правильный путь или, может быть, здесь более простые способы.