gpt4 book ai didi

java - 如何使用 Spring 数据 jpa 更新实体

转载 作者:IT老高 更新时间:2023-10-28 13:51:53 25 4
gpt4 key购买 nike

我有一个实体和一个 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());
}
}

提前致谢

最佳答案

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

return personRepository.save(oldPerson);

您当前所做的只是保存一个人。这就是它创建第二个条目的原因。 你应该先找到oldPerson,

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

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

关于java - 如何使用 Spring 数据 jpa 更新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22031128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com