【Spring boot】外部キーのある自作クラスへ新規で値を登録する方法

実現したいこと

employee_idを外部キーに持つqa_answerクラスに新規で登録したいのですがうまくいきません。

前提

java/Employeeクラス

1@Entity2@Table(name = "employee")3public class Employee {4 @Id5 // 社員ID6 @Column(name = "employee_id", nullable = false)7 @GeneratedValue(strategy = GenerationType.IDENTITY)8 private Integer employee_id;9 10 // 所属11 @Column(name = "team",nullable = false)12 private Integer team;13 14 // 役員15 @Column(name = "staff", nullable = false)16 private Integer staff;17 18 // 名字19 @Column(name = "first_name")20 private String first_name;21 22 // 名前23 @Column(name = "last_name")24 private String last_name;25 26 public Integer getEmployee_id() {27 return employee_id;28 }29 30 public void setEmployee_id(Integer employee_id) {31 this.employee_id = employee_id;32 }33 34 public Integer getTeam() {35 return team;36 }37 38 public void setTeam(Integer team) {39 this.team = team;40 }41 42 public Integer getStaff() {43 return staff;44 }45 46 public void setStaff(Integer staff) {47 this.staff = staff;48 }49 50 public String getFirst_name() {51 return first_name;52 }53 54 public void setFirst_name(String first_name) {55 this.first_name = first_name;56 }57 58 public String getLast_name() {59 return last_name;60 }61 62 public void setLast_name(String last_name) {63 this.last_name = last_name;64 }65 66 67}68

java/qa_answerクラス

1@Entity2@Table(name = "qa_answer")3public class QaAnswer {4 @Id5 @Column(name = "id", nullable = false)6 @GeneratedValue(strategy = GenerationType.IDENTITY)7 private Integer id;8 9 @ManyToOne10 @JoinColumn(name = "employee_id", referencedColumnName = "employee_id",nullable = false)11 private Employee employee;12 13 @Column(name = "question", nullable = false)14 private Integer question;15 16 @Column(name = "answer")17 private String answer;18 19 public Employee getEmployee() {20 return employee;21 }22 23 public void setEmployee(Employee employee) {24 this.employee = employee;25 }26 27 public Integer getQuestion() {28 return question;29 }30 31 public void setQuestion(Integer question) {32 this.question = question;33 }34 35 public String getAnswer() {36 return answer;37 }38 39 public void setAnswer(String answer) {40 this.answer = answer;41 }42 43 44}45

java/QaAnswerControllerクラス

1@RestController2@RequestMapping("api/qaanswer")3public class QaAnswerController {4 @Autowired5 private final QaAnswerService qaService = new QaAnswerService();6 7 @PostMapping("/create")8 public QaAnswer createQaAnswer(int employee_id,@RequestBody QaAnswer qa_answer) {9 return qaService.createQaAnswer(employee_id,qa_answer);10 }11 12}

java/QaAnswerServiceクラス

1@Service2public class QaAnswerService {3 @Autowired4 QaAnswerRepository qaRepository;5 6 @Autowired7 EmployeeRepository empRepository;8 9 public QaAnswer createQaAnswer(int employee_id,QaAnswer qa_answer) {10 Employee emp = empRepository.findById((long)employee_id).get();11 QaAnswer qa = new QaAnswer();12 13 qa.setEmployee(emp);14 qa.setQuestion(qa_answer.getQuestion());15 qa.setAnswer(qa_answer.getAnswer());16 qaRepository.save(qa);17 18 return qa;19 }20}

▼POST通信の情報

JSON

1{2 "employee_id": 10,3 "question": 2,4 "answer": "テスト1"5}

発生している問題・エラーメッセージ

名前付きパラメータが見つからないと行ったエラーぽいのですが、「employee_id」の値はおくっているはず。。。

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalStateException: Optional int parameter 'employee_id' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.] with root cause

該当のソースコード

なぜ、employee_idのところでエラーとなるのかわからず。。

java/QaAnswerServiceクラス

1 public QaAnswer createQaAnswer(int employee_id,QaAnswer qa_answer) {2 Employee emp = empRepository.findById((long)employee_id).get();3 QaAnswer qa = new QaAnswer();4 5 qa.setEmployee(emp);6 qa.setQuestion(qa_answer.getQuestion());7 qa.setAnswer(qa_answer.getAnswer());8 qaRepository.save(qa);

試したこと

▼同じようなことを質問している人外なので参考にして、qa_answerクラスの「id」の@GeneratedValue を削除しましたが特に変わらず。。
https://teratail.com/questions/244129

コメントを投稿

0 コメント