Как получить отдельный экземпляр из Hibernate в тесте Spring JUnit - PullRequest
0 голосов
/ 21 июля 2011

Я написал тест, который, как я знаю, неверен.Я знаю, что это получает тот же экземпляр для оригинального продукта и обновленного продукта, поэтому, когда я вызываю updatedProduct.setProductName("Updated Product Name");, он обновляет элемент productName как исходного продукта, так и обновленного продукта.Как я могу изменить это так, чтобы я получил 2 разных экземпляра этого объекта.

@Test
@Transactional
public void testUpdateProduct() {
    productDao.addProduct(createTempProduct());
    Product originalProduct = productDao.getProduct((long)999);
    Product updatedProduct = productDao.getProduct((long)999);

    updatedProduct.setProductName("Updated Product Name");
    productDao.updateProduct(updatedProduct);
    Product newProduct = productDao.getProduct((long)999);
    Assert.assertNotSame(originalProduct, newProduct);
    Assert.assertSame(updatedProduct, newProduct);
}

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

Вы попали в кэш первого уровня Hibernate .Другими словами, каждый вызов productDao.getProduct (999) в рамках этого теста будет возвращать один и тот же экземпляр Product, поскольку при первой его загрузке экземпляр сохраняется в сеансе на тот случай, если вы запросите его снова.Чтобы избежать этого, вы можете либо исключить конкретный объект из сеанса, либо очистить все объекты из сеанса между вызовами.

0 голосов
/ 22 июля 2011

Создайте new Product, получите все значения из DB-продукта и установите эти значения в новом объекте.Тогда это обман оригинального объекта, по крайней мере, с точки зрения значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...