我有一个实体和一个 Junit,我想测试更新方法是否正常工作,但是当我从 CrudRepository 调用保存方法时,我在表中得到一个新条目而不是更新的实体。
这是我的实体:
@Entity(name = "PERSON")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "PERSON_ID")
private Integer id;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
//getters and setters
}
这是我的服务类:
@Service
public class PersonServiceImpl implements PersonService {
@Autowired
private PersonRepository personRepository;
@Override
public Person updatePerson(Person oldPerson) throws Exception {
return personRepository.save(oldPerson);
}
}
这是我的存储库
public interface PersonRepository extends CrudRepository<Person, String> {
}
这是我的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { JPAConfigurationTest.class })
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@Transactional
public class UpdatePersonServiceIntegrationTest {
@Autowired
PersonService personService;
@Before
public void setUp() throws Exception {
Person person = new Person(1);
person.setFirstName("Nicolas");
person.setLastName("Spessot");
personService.createPerson(person); //This invokes save
}
@Test
public void updatingPerson() throws Exception{
Person person = new Person(1);
person.setFirstName("Juan");
person.setLastName("Riquelme");
personService.updatePerson(person);
Person retrieved = personService.retrievePerson(1); //This invokes findOne
assertEquals(1, person.getId());
assertEquals("Juan", person.getFirstName());
assertEquals("Riquelme", person.getLastName());
}
}
提前致谢
原文由 nspessot 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题出在服务类中的 updatePerson 方法中。具体来说:
你目前所做的只是拯救一个人。这就是它创建第二个条目的原因。
你应该做的是先找到老人,
然后更新它的属性,然后像以前一样保存它。希望有所帮助。