簡體   English   中英

如何在 Spring JUnit 測試中從 Hibernate 獲取單獨的實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM