我写了一个测试,我知道它是错误的。我知道这会为originalProduct 和updatedProduct 获取相同的实例,因此当我调用updatedProduct.setProductName("Updated Product Name");
时,它会更新originalProduct 和updatedProduct 的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);
}
最佳答案
您正在访问 Hibernate 的 first-level cache 。换句话说,在该测试范围内对 ProductDao.getProduct(999) 的每次调用都将返回相同的 Product 实例,因为第一次加载它时,该实例将存储在 Session 中,以防您再次请求它。为了避免这种情况,您可以 evict the specific object来自 session 或 clear all objects来自调用之间的 session 。
关于java - 如何在 Spring JUnit 测试中从 Hibernate 获取单独的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6781811/