2011-07-21 134 views
0

我寫了一個測試,我知道錯了獲得一個單獨的實例。我知道,這得到了相同的實例originalProduct和updatedProduct這樣,當我把它updatedProduct.setProductName("Updated Product Name");都更新和originalProduct的updatedProduct將產品名稱成員。我怎樣才能改變這個,讓我得到這個對象的2個不同的實例。如何從休眠在Spring JUnit測試

@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); 
} 
+0

這將有助於瞭解什麼'productDao.getProduct()'不 –

回答

3

您正在打Hibernate的first-level cache。換句話說,該測試的範圍內productDao.getProduct(999)每次調用將返回相同的產品實例,因爲第一次加載時,該實例存儲在會議剛剛在你再次問情況。爲了避免這種情況,您可以從電話之間的會話的會話或clear all objectsevict the specific object

0

創建一個new Product,並從DB-產品的所有值,並在新的對象設置這些值。那麼它至少在價值方面是對原始對象的欺騙。