У меня есть класс БД, помеченный @Entity
в Java
.
Я хочу сравнить 2 экземпляра класса, который я хочу сравнить по полю, но получить ошибку от Hamcrest
, что объектыне равный.Он сохраняется, пока я не сгенерирую equals
и hashCode
в Eclipse
.
Структура сущности следующая:
@Entity
@Table(name = "book")
public class Book extends BaseEntity {
@NotNull
@Column
private String title;
}
и
@MappedSuperClass
class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
}
Для простоты я опустил все методы получения и установки.
Пример кода, как я использую сущность выше:
public void updateBookTitles(bookIds) {
List<Book> books = bookRepository.findByBookIds(bookIds);
books.forEach((book) -> {
book.setTitle("Example: " + book.getTitle());
});
bookRepository.saveAll(books);
}
При тестировании этого:
@Test
public void updateSingleBookTitle() {
Book book = new Book();
book.setId(1L);
book.setTitle("Stack Overflow manual");
when(bookRepository.findByBookIds(Arrays.asList(1L))).thenReturn(Arrays.asList(book));
updateBookTitles(Arrays.asList(1L));
Book expectedBook = new Book();
expectedBook.setId(1L);
expectedBook.setTitle("Stack Overflow manual");
verify(bookRepository, times(1)).saveAll(Arrays.asList(expectedBook))
}
Поэтому вопрос у меня есть.Есть ли способ, кроме автогенерации equals
и hashCode
, чтобы объекты были равны во время тестирования, а также не снижать производительность при сохранении в базе данных.Насколько я понимаю, в данный момент объекты проверяются полем id
не всеми полями.