Есть программа с сущностями Author, Book, Genre которые связанны друг с другом как многие ко многим.
В базе данных существуют таблицы для их хранения и обеспечения свяpи между ними.
В java коде:
spoilerpublic class Author {
...
private List<Book> books;
private List<Genre> genres;
}
public class Book {
...
private List<Author> authors;
private List<Genre> genres;
}
public class Genre {
...
private List<Author> authors;
private List<Book> books;
}
В базе данных:
spoilerCREATE TABLE author (
`author_id` INT NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
...
);
CREATE TABLE book (
`book_id` INT NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
...
);
CREATE TABLE genre (
`genre_id` INT NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
...
);
CREATE TABLE author_book (
`author_id` INT NOT NULL REFERENCES author(author_id),
`book_id` INT NOT NULL REFERENCES book(book_id),
UNIQUE KEY `author_book_unique_id` (`author_id`,`book_id`)
);
CREATE TABLE author_genre (
`author_id` INT NOT NULL REFERENCES author(author_id),
`genre_id` INT NOT NULL REFERENCES genre(genre_id),
UNIQUE KEY `author_genre_id` (`author_id`,`genre_id`)
);
CREATE TABLE book_genre (
`book_id` INT NOT NULL REFERENCES book(book_id),
`genre_id` INT NOT NULL REFERENCES genre(genre_id),
UNIQUE KEY `book_genre_id` (`book_id`,`genre_id`)
);
К примеру сервис слой вызывает метод getAuthor(id) в слое DAO.
У возвращаемого автора должны быть проинициализированы поля books и genres. Там должны находится
книги которые писал автор и жанры в которых он работал. В свою очередь у каждой книги должна быть
информация в каком жанре она написана и какие у нее авторы. А жанр должен хранить список книг относящихся к нему
и авторов работающих в данном жанре.
Таким образом возвращая автора сервис слою мы должны загрузить кучу информации из базы данных, и это будет не один запрос, а очень много.
Вопрос верна ли данная архитектура(просматривая код примеров hibernate вижу что хранятся именно сущности, а не их ид).
Но как реализовать этот вариант в JDBC, на практике не понятно. Если архитектурно это правильно подскажите как это реализовать!
Или наоборот нужно в сущности хранить не ссылку на другую сущность, а информацию о id другой сущности.
public class Author {
...
private List booksID;
private List genresID;
}
В дальнейшем код будет переводится на hibernate но
в данный момент необходим ответ только с использованием JDBC и Java, без использования hibernate и прочих фреймворков.
UPD для интересующихся этой же темой может быть полезно посмотреть :
https://ru.stackoverflow.com/questions/1127662/%D0...