我有一個 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); }員工控制器 -> 員工服務@Servicepublic 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正在“更新”的內容直接來自數據庫,那么一切都像魅力一樣。
1 回答

largeQ
TA貢獻2039條經驗 獲得超8個贊
上的@OneToMany注釋EmployeeEntity.ManagedDepartments沒有指定mappedBy屬性,這是雙向關系在“一”側所必需的??磥磉@種關系確實是雙向的,所以應該是
@OneToMany(mappedBy = "manager")
private Set<DepartmentEntity> ManagedDepartments;
如果關系實際上是單向的,那么它將被映射到一個輔助表,就像您的 JPA 提供程序在錯誤情況下所尋找的那樣。此外,在實踐中是否實際查找該表取決于特定實體對象的詳細信息以及您如何操作它們,這似乎是合理的。
添加回答
舉報
0/150
提交
取消