Структура базы данных для обзоров - Spring boot, hibernate, java - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу найти хорошую структуру базы данных для хранения отзывов о проекте совместного использования автомобилей: я хочу, чтобы у меня была только таблица отзывов с идентификатором, description, Review_id, Reviewer_name. Итак, как пользователь, я хочу просмотреть автомобиль или другого пользователя. (пользователь - машина -> один ко многим). Пользователь - обзор -> один ко многим (у пользователя может быть один или несколько обзоров от других пользователей) Автомобиль - обзор -> один ко многим (у автомобиля может быть один или несколько отзывов от пользователей). Таким образом, в таблице отзывов, отзывы_ может быть как автомобиль и идентификатор пользователя.

Класс пользователя:

---
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "reviewed_id")
private List<Review> reviews;
---

Класс автомобиля:

---
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "reviewed_id")
private List<Review> reviews;
---

Класс обзора:

---
@Column(name = "reviewed_id")
private UUID reviewedId;
---

Отзыв контроллер:

---
@PostMapping("/{reviewdId}")
@ResponseStatus(HttpStatus.CREATED)
public void addReviewTo(@PathVariable UUID reviewdId, @Valid @RequestBody AddReviewDto addReviewDto,
                            @RequestParam UUID reviewerUserId) {
    reviewService.addReviewToUser(reviewdId, addReviewDto, reviewerUserId);
}
---

Служба просмотра:

---
public void addReviewTo(UUID reviewedId, AddReviewDto addReviewDto, UUID reviewerUserId) {
    User reviewer = userRepository.findById(reviewerUserId).orElseThrow(IllegalArgumentException::new);
    Review review = ReviewDtoConverter.toReview(addReviewDto, reviewer.getFirstName());
    review.setReviewedId(reviewedId);
    reviewRepository.save(review);
}
---
...