Conversation
- Методы выборки из таблицы книг.
- Добавление Spring Shell.
- Добавление Shell команд.
- Разделение методов на отдельные модули. - Добавление тестов.
- Изменены запросы книг. - Добавление внешних ключей для таблицы книг. - Изменение сущности Book. - Изменение типа id.
- Использование @jdbcTest.
- Изменение тестов.
- Доработка тестов.
| @Column(name = "AUTHOR_ID", updatable = false, insertable = false) | ||
| private long author_id; | ||
| @Column(name = "GENRE_ID", updatable = false, insertable = false) | ||
| private long genre_id; |
There was a problem hiding this comment.
Все же лучше оставить только Author и Genre
| @Column(name = "GENRE_ID", updatable = false, insertable = false) | ||
| private long genre_id; | ||
|
|
||
| @OneToOne(optional=false) |
| //@JoinColumn(name="ID", referencedColumnName="AUTHOR_ID") | ||
| private Author author; | ||
|
|
||
| @OneToOne(optional=false) |
|
|
||
| @Override | ||
| public List<Book> getAllObjects() { | ||
| List<Book> books = em.createQuery("select b from Book b order by b.id ") |
There was a problem hiding this comment.
Данный запрос выльется в N*2+1 запрос к БД. Это можно увидеть если включить show_sql. В текущем случае из будет 3 т.к. у всех книг одинаковые жанры и авторы (видимо забыли изменить в data.sql). Т.к. автор и жанр это не коллекции тут будет лучше использовать join fetch
| private AuthorDao authorDaoJpa; | ||
|
|
||
| @Test | ||
| void getById() { |
There was a problem hiding this comment.
На сами тесты тоже лучше поставить @DisplayName
- Связи OneToOne изменены на ManyToOne.
| + "from Book b " | ||
| + "inner join fetch b.author a " | ||
| + "inner join fetch b.genre g " | ||
| + "where b.id = :id ") |
There was a problem hiding this comment.
Ну я предложил явно указать возвращаемый класс книги для запроса) Но вы уже и так это поняли)
| @Column(name = "CAPTION") | ||
| private String caption; | ||
| @Column(name = "COMMENT") | ||
| private String comment; |
There was a problem hiding this comment.
Чуть не пропустил. В задании имелось в виду что у книги может быть много комментариев. Т.е. ожидалась сущность Comment и отношения между ней и Book
- Доработка скриптов.
- Добавление классов для обработки сущности Comment и покрытие тестами.
| public List<Comment> getCommentsByBookId(long bookId) { | ||
| Book book = bookDao.getById(bookId); | ||
|
|
||
| return commentDao.getByBook(book); |
There was a problem hiding this comment.
Возможно стоит все же сделать метод getByBookId
| @Fetch(FetchMode.JOIN) | ||
| @OneToMany(mappedBy = "book", fetch = FetchType.LAZY) | ||
| @OnDelete(action = OnDeleteAction.CASCADE) | ||
| private List<Comment> comments; |
There was a problem hiding this comment.
Не уверен, что комментарии это свойство книги, скорее наоборот, информация о книге это свойство комментария
No description provided.