Skip to content

Feature/hw 06#2

Open
uoles wants to merge 30 commits intomasterfrom
feature/hw-06
Open

Feature/hw 06#2
uoles wants to merge 30 commits intomasterfrom
feature/hw-06

Conversation

@uoles
Copy link
Copy Markdown
Owner

@uoles uoles commented Jun 17, 2019

No description provided.

Maksim Kulikov and others added 24 commits April 22, 2019 16:08
- Методы выборки из таблицы книг.
- Добавление Spring 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;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Все же лучше оставить только Author и Genre

@Column(name = "GENRE_ID", updatable = false, insertable = false)
private long genre_id;

@OneToOne(optional=false)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ManyToOne. Один автор - много книг

//@JoinColumn(name="ID", referencedColumnName="AUTHOR_ID")
private Author author;

@OneToOne(optional=false)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ManyToOne. Один жанр- много книг


@Override
public List<Book> getAllObjects() {
List<Book> books = em.createQuery("select b from Book b order by b.id ")
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Данный запрос выльется в N*2+1 запрос к БД. Это можно увидеть если включить show_sql. В текущем случае из будет 3 т.к. у всех книг одинаковые жанры и авторы (видимо забыли изменить в data.sql). Т.к. автор и жанр это не коллекции тут будет лучше использовать join fetch

private AuthorDao authorDaoJpa;

@Test
void getById() {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

На сами тесты тоже лучше поставить @DisplayName

+ "from Book b "
+ "inner join fetch b.author a "
+ "inner join fetch b.genre g "
+ "where b.id = :id ")
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

, Book.class

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну я предложил явно указать возвращаемый класс книги для запроса) Но вы уже и так это поняли)

@Column(name = "CAPTION")
private String caption;
@Column(name = "COMMENT")
private String comment;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Чуть не пропустил. В задании имелось в виду что у книги может быть много комментариев. Т.е. ожидалась сущность Comment и отношения между ней и Book

uoles added 2 commits June 21, 2019 08:18
- Добавление классов для обработки сущности Comment и покрытие тестами.
public List<Comment> getCommentsByBookId(long bookId) {
Book book = bookDao.getById(bookId);

return commentDao.getByBook(book);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Возможно стоит все же сделать метод getByBookId

@Fetch(FetchMode.JOIN)
@OneToMany(mappedBy = "book", fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
private List<Comment> comments;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не уверен, что комментарии это свойство книги, скорее наоборот, информация о книге это свойство комментария

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants