在我準備的場景中,jpa 鎖定了新記錄。因此,資料庫中的觸發器沒有被激活。我該如何解決這種情況?
當我創建客戶時,代碼由觸發器分配給客戶。但是,由于在此程序中創建的記錄已鎖定,因此不會激活觸發器。
@Entity
public class Customer {
@Id
@Column
private int id;
@Column
private String name;
@Column
private String address;
@Column
private int personRef;
@Column
private int customerCode; //db trigger updated
}
@Entity
public class Person {
@Id
@Column
private int id;
@Column
private String name;
@Column
private String surname;
}
public class CustomerDTO {
private int id;
private String name;
private String address;
private int personRef;
private PersonDTO person;
}
public class PersonDTO {
private int id;
private String name;
private String surname;
}
@Repository
public interface CustomerRepository extends JpaRepository<Customer, Integer>{
}
@Service
public class CustomerService{
@Autowired
private final CustomerRepository customerRepository;
@Autowired
private final PersonService personService;
@Transactional(rollbackFor = {Exception.class})
public int control(CustomerDTO customerDTO){
Customer customer = customerRepository.findById(customerDTO.getId());
if(customer == null){
ModelMapper mapper = new ModelMapper();
customer = mapper.map(customer,Customer.class);
customerRepository.saveAndFlush(customer);
Person person = mapper.map (customer.getPerson(),Person.class);
personService.saveAndFlush(person);
customer = customerRepository.findById(customerDTO.getId());
customer.setPersonRef(person.getId());
customerRepository.saveAndFlush(customer);
return customer.getCustomerCode;
}
return customer.getCustomerCode();
}
}
uj5u.com熱心網友回復:
問題是觸發器在資料庫中運行,而 Hibernate 不知道這一點。
所以你必須在觸發器運行后重繪 物體:
@Service
public class CustomerService{
@Autowired
private final CustomerRepository customerRepository;
@Autowired
private final PersonService personService;
@Autowired
private EntityManager em;
@Transactional(rollbackFor = {Exception.class})
public int control(CustomerDTO customerDTO){
Customer customer = customerRepository.findById(customerDTO.getId());
if(customer == null){
ModelMapper mapper = new ModelMapper();
customer = mapper.map(customer,Customer.class);
customerRepository.saveAndFlush(customer);
Person person = mapper.map (customer.getPerson(),Person.class);
personService.saveAndFlush(person);
customer = customerRepository.findById(customerDTO.getId());
customer.setPersonRef(person.getId());
customerRepository.saveAndFlush(customer);
// Reload the data from the database
em.refresh(customer);
return customer.getCustomerCode;
}
return customer.getCustomerCode();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/351322.html
下一篇:休眠。人沒有被映射
