我有一个 RESTful 端点,根据记录是否已经存在,将使用 JPA 的.save()方法插入新记录或更新数据库中的现有记录。
我遇到的问题是,当尝试更新现有记录时,JPA 将尝试访问不存在的表,employee_department. 我想这是因为在我的Employee实体上我与实体有@ManyToOne关系Department。
仅当我尝试将所有Employee model数据(从 POST 请求发送的数据)映射到Employee entity. 我会得到一个错误,即数据库中没有名为employee_department. 相反,如果我创建一个扩展 JPAfindByEmail(employee.getEmail())的方法EmployeeRepository,并尝试将该数据直接保存回数据库,则不会出现错误。
model -> entity我的问题是,与仅从数据库返回记录并保存相比,在尝试保存之前映射可能会丢失什么?
这是来自client -> controller -> service -> mapper然后返回到客户端的数据流。
POST 请求中的客户端 JSON
{
"id": 109,
"isActive": true,
"manager": null,
"firstName": "string",
"middleInitial": null,
"lastName": "string",
"department": {
"id": 101
},
"jobTitle": {
"id": 1001
},
"email": "g",
"skypeName": "g",
"isManager": false
}
客户端 -> 员工控制器
@RestController
@RequestMapping("/emps")
public class EmployeeController {
@Autowired
EmployeeService employeeService;
@RequestMapping(method = {RequestMethod.POST, RequestMethod.PUT})
public Employee createOrUpdateEmployee(@RequestBody Employee employee) {
return employeeService.storeOrUpdate(employee);
}
员工控制器 -> 员工服务
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
@Autowired
EmployeeMapper employeeMapper;
public Employee storeOrUpdate(Employee employee) {
EmployeeEntity employeeEntity = employeeMapper.modelToEntity(employee);
EmployeeEntity savedEmployeeEntity = employeeRepository.save(employeeEntity);
Employee employeeModel = employeeMapper.entityToModel(savedEmployeeEntity);
return employeeModel;
}
Employee正在“更新”的内容直接来自数据库,那么一切都像魅力一样。
千万里不及你
largeQ
随时随地看视频慕课网APP
相关分类