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