[英]How to get a separate instance from Hibernate in a Spring JUnit test
我寫了一個測試,我知道這是錯誤的。 我知道這為 originalProduct 和 updatedProduct 獲得了相同的實例,因此當我調用updatedProduct.setProductName("Updated Product Name");
它更新 originalProduct 和 updatedProduct 的 productName 成員。 如何更改此設置,以便獲得此 object 的 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);
}
您正在訪問 Hibernate 的一級緩存。 換句話說,該測試的 scope 中對 productDao.getProduct(999) 的每次調用都將返回相同的 Product 實例,因為在您第一次加載它時,該實例存儲在 Session 中,以防您再次請求它。 為了避免這種情況,您可以從 Session 中逐出特定的 object 或在調用之間清除 Session 中的所有對象。
創建一個new Product
,從數據庫產品中獲取所有值,並將這些值設置在新的 object 中。 然后它是原始 object 的欺騙,至少在價值方面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.