2011-07-21 91 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-产品的所有值,并在新的对象设置这些值。那么它至少在价值方面是对原始对象的欺骗。