#hibernate #spring-data-jpa #spring-data #nhibernate-mapping
#спящий режим #spring-data-jpa #spring-data #nhibernate-сопоставление
Вопрос:
У меня есть 3 таблицы User
, Book
и Review
. Review
имеет EmbeddedId, который я хочу сделать уникальным, чтобы не было дубликатов пользователя, просматривающего книгу более одного раза. Заранее спасибо.
@Entity
public class Review {
@EmbeddedId
private ReviewCompositKey id;
// ....
}
@Embeddable
public class ReviewCompositKey implements Serializable {
private static final long serialVersionUID = 1L;
private Long userId;
private Long bookId;
// ....
}
@Override
public void run(String... args) throws Exception {
User user = new User("John", "Doe", "john@example.com",
"testpass", "testpass", "admin", true);
user = userRepository.save(user);
List<String> authors = Arrays.asList("Blake", "Jane");
Book book = new Book("Just A Trial", "123456789abc", "1940",
authors);
book = bookRepository.save(book);
Review review = new Review(new ReviewCompositeKey(user.getId(),
book.getId()), (byte)4, "First Title");
review = reviewRepository.save(review);
Review review1 = new Review(new ReviewCompositeKey(user.getId(),
book.getId()), (byte)4, "First Title");
review1 = reviewRepository.save(review1);
}
Комментарии:
1. Ваша
@EmbeddedId
аннотация уже делает обзор уникальным… вам нужна помощь с другими таблицами или вопрос был о классе Review?2. Спасибо за ответ. Я спросил только о классе Review, потому что, когда я создавал отзыв с одним и тем же пользователем и дважды заказывал, это сработало, поэтому мне было интересно, уникальны ли они вместе.
3. Трудно сказать, не видя всего кода, но из того, на что я смотрю, вы не сможете этого сделать. Вы не инициализируете
userId
andbookId
, так что, возможно, он использует какой-то случайный Long?4. Я отредактировал код, возможно, это немного прояснит проблему
Ответ №1:
Код в порядке, после итерации по таблице отзывов у меня был только один экземпляр одного и того же комментария, он их не дублировал. Причина, по которой я был сбит с толку, заключалась в том, что я ожидал, что он выдаст исключение, когда пользователь попытается дублировать обзоры.