我有这个测试设置,我正在使用 spring、derby 和 JPA,我想测试更新是否有效。
我真的不能以标准方式做到这一点,也就是说。创建实体对象,持久化,再次查找对象,更改对象中的某些字段,再次持久化,查找是否已更改。
这种方法的问题是我没有得到实体的新实例。它总是一样的。所以我不能真正判断更新是否正常工作,因为我总是在更改同一个对象,所以任何更改都会过早地反映出来。
如果我对某个对象进行更改而不将其与持久性上下文合并,然后尝试在该对象上进行查找,则更改已经存在于查找中,因为它始终使用同一个对象。
有什么方法可以让我失去上下文并进行真正的测试以确保更新正常工作?
这是我当前的代码:
@Test
public void canUpdate() {
JsonTestEntity entity1 = new JsonTestEntity();
JsonTestEntity entity2 = new JsonTestEntity();
String message = "OmegaCV1";
String message2 = "OmegaCV2";
entity1.setMessage(message);
entity2.setMessage(message2);
em.persist(entity1);
em.persist(entity2);
em.flush();
JsonTestEntity jsonTestEntity = em.find(JsonTestEntity.class, entity2.getId());
assertNotNull("Could not find persisted entity", jsonTestEntity);
assertEquals("Was not same entity", message2, jsonTestEntity.getMessage());
String changeMessage = "Changed message";
jsonTestEntity.setMessage(changeMessage);
JsonTestEntity unChangedEntity = em.find(JsonTestEntity.class, entity2.getId());
assertEquals("Message was prematurely changed", message2, unChangedEntity.getMessage());
em.merge(jsonTestEntity);
JsonTestEntity changedEntity = em.find(JsonTestEntity.class, entity2.getId());
assertEquals("Message was not changed", changeMessage, changedEntity.getMessage());
}