java - 如何在 Spring JUnit 测试中从 Hibernate 获取单独的实例

标签 java spring object

我写了一个测试,我知道它是错误的。我知道这会为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/

相关文章:

Android:如何获取 Gson LinkedTreeMap 值?

object - java中RSA加密的替代方案

PHP:是否可以从文件内容(字符串)创建 SplFileObject 对象?

java - java中的停止 token 过滤器以使用您想要的停止词

java - 从 String[] 中删除重复项

java - 发生此错误时 Error :(1, 1) java.desktop 和 java.datatransfer 中的 java : module JavaFX reads package java. awt

java - 如何在我的 Java 项目中找到不需要的 JARS

java - JSF + Spring + JPA + hibernate : keep entitymanager alive when rendering view?

java - 如何初始化 Matrix 对象

java - Spring Data JPA 中的自定义(原始)查询