Предположим, что в таблице базы данных есть неключевой столбец с именем RECORD_ID, который автоматически генерируется / упорядочивается в базе данных.
Теперь в моей сущности для таблицы выше, чуть выше поля для RECORD_ID, я использую аннотацию hibernate @Generated, чтобы указать hibernate, что DB будет нести ответственность за вставку значения в это конкретное поле. Это выглядит следующим образом:
@Column(name = "RECORD_ID", unique = true, nullable = true, insertable = false, updatable = false)
@Generated(GenerationTime.INSERT)
private Long recordId;
Я запускаю свой код, и он работает нормально. DB вставляет значение, как и ожидалось.
Теперь я пишу пример модульного теста с HSQL, чтобы убедиться, что моя логика не повреждена.
Логика имеет запрос, который выбирает запись на основе RECORD_ID.
Теперь, когда я создаю прибор и вызываю свой тест, HSQL не будет генерировать значение для RECORD_ID записи при сохранении моего прибора. Это оставляет это как ноль. Но логика, которую я собираюсь проверить, основана на получении RECORD_ID, что здесь невозможно.
В HSQL DB он остается нулевым. И поэтому я не могу завершить модульное тестирование!
Просьба пролить свет на решение этой проблемы или обходного пути.
Пожалуйста, найдите код модульного теста ниже
@Test
public void testProductCancelDAL() {
savePrerequisites();
Logic myLogic = new Logic();
/* Logic fetches the reservation record based on RECORD_ID */
assertNotNull(myLogic.invoke());
}
public void savePrerequisites() {
//Stroing product type
Product product = ProductFixture.createProduct();
sessionFactory.getCurrentSession().save(product);
//Storing Itinerary
Itinerary itn = ItnFixture.create();
sessionFactory.getCurrentSession().save(itn);
Reservation res = ReservationFixture.create();
sessionFactory.getCurrentSession().save(res);
sessionFactory.getCurrentSession().flush();
}