繁体   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