如何使用 spring data jpa 更新实体

新手上路,请多包涵

我有一个实体和一个 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 许可协议

阅读 560
1 个回答

问题出在服务类中的 updatePerson 方法中。具体来说:

 return personRepository.save(oldPerson);

你目前所做的只是拯救一个人。这就是它创建第二个条目的原因。

你应该做的是先找到老人,

 Person p = personRepository.findOne(oldPerson.getId())

然后更新它的属性,然后像以前一样保存它。希望有所帮助。

原文由 chinesewhiteboi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题