gpt4 book ai didi

java - 如何在@HandleBeforeSave 事件中获取旧实体值以确定属性是否已更改?

转载 作者:IT老高 更新时间:2023-10-28 20:53:09 24 4
gpt4 key购买 nike

我正在尝试在 @HandleBeforeSave 事件中获取旧实体。

@Component
@RepositoryEventHandler(Customer.class)
public class CustomerEventHandler {

private CustomerRepository customerRepository;

@Autowired
public CustomerEventHandler(CustomerRepository customerRepository) {
this.customerRepository = customerRepository;
}

@HandleBeforeSave
public void handleBeforeSave(Customer customer) {
System.out.println("handleBeforeSave :: customer.id = " + customer.getId());
System.out.println("handleBeforeSave :: new customer.name = " + customer.getName());

Customer old = customerRepository.findOne(customer.getId());
System.out.println("handleBeforeSave :: new customer.name = " + customer.getName());
System.out.println("handleBeforeSave :: old customer.name = " + old.getName());
}
}

如果我尝试使用 findOne 方法获取旧实体,但这会返回新事件。可能是因为当前 session 中的 Hibernate/Repository 缓存。

有没有办法获取旧实体?

我需要这个来确定给定的属性是否被更改。如果属性发生变化,我需要执行一些操作。

最佳答案

如果使用 Hibernate,您可以简单地从 session 中分离新版本并加载旧版本:

@RepositoryEventHandler 
@Component
public class PersonEventHandler {

@PersistenceContext
private EntityManager entityManager;

@HandleBeforeSave
public void handlePersonSave(Person newPerson) {
entityManager.detach(newPerson);
Person currentPerson = personRepository.findOne(newPerson.getId());
if (!newPerson.getName().equals(currentPerson.getName)) {
//react on name change
}
}
}

关于java - 如何在@HandleBeforeSave 事件中获取旧实体值以确定属性是否已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25233089/

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