前提・実現したいこと
Springで、MySQL、JPA、Thymleafを利用した入力フォームからデータを新規登録しようとしたところ、以下のエラーメッセージが出ました。
最終的には、フォームから入力された値をDBに登録したいです。
発生している問題・エラーメッセージ
エラーメッセージ Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'boss_end_cmt' in 'field list'
該当のソースコード
エンティティ
①GoalSeqEntity.java
java
1@Entity 2@Table(name="goals_seq") 3public class GoalSeq { 4 @Id 5 @Column(name="id") 6 @GeneratedValue(strategy = GenerationType.IDENTITY) 7 private Integer id; 8 9 @ManyToOne(targetEntity = UserMaster.class) 10 @JoinColumn(nullable = false, name = "user_id") 11 private UserMaster userid; 12 13 @Column(name="goal_id") 14 private Integer goalid; 15 16 @Column(name="goal_title") 17 private String goaltitle; 18 19 @Column(name="goal_detail") 20 private String goaldetail; 21 22 @Column(name="goal_weight") 23 private String goalweight; 24 25 @Column(name="year") 26 private String year; 27//Meisaiのエンティティ部分(内部結合しているのでこちらでも記述します) 28 29 @Column(name = "self_mid_cmt") 30 private String selfmidcmt; 31 32 @Column(name = "boss_mid_cmt") 33 private String bossmidcmt; 34 35 @Column(name = "self_end_cmt") 36 private String selfendcmt; 37 38 @Column(name = "boss_end_cmt") 39 private String bossendcmt; 40 41 @Column(name = "first_rvw_ck") 42 private Boolean firstrvwck; 43 44 @Column(name = "mid_rvw_ck") 45 private Boolean midrvwck; 46 47 @Column(name = "end_rvw_ck") 48 private Boolean endrvwck;
②Meisai.java
java
1@Entity 2@Table(name = "meisai_tbl") 3public class Meisai { 4 5 @Id 6 @Column(name = "meisai_id") 7 @GeneratedValue(strategy = GenerationType.IDENTITY) 8 private Integer meisaiid; 9 10 @Column(name = "self_mid_cmt") 11 private String selfmidcmt; 12 13 @Column(name = "boss_mid_cmt") 14 private String bossmidcmt; 15 16 @Column(name = "self_end_cmt") 17 private String selfendcmt; 18 19 @Column(name = "boss_end_cmt") 20 private String bossendcmt; 21 22 @Column(name = "first_rvw_ck") 23 private Boolean firstrvwck; 24 25 @Column(name = "mid_rvw_ck") 26 private Boolean midrvwck; 27 28 @Column(name = "end_rvw_ck") 29 private Boolean endrvwck; 30setterとgetterは略します
リポジトリ
①GoalSeqRepository
java
1@Repository 2public interface GoalSeqRepository extends JpaRepository<GoalSeq,Integer>{ 3 @Query(value="SELECT*FROM goals_seq INNER JOIN meisai_tbl ON goals_seq.id = meisai_tbl.goalseq_id where goals_seq.delete_flg=false and goals_seq.id=:ID ",nativeQuery = true) 4 public GoalSeq findCurrentOne(@Param("ID")Integer goalseqid); 5}
②MeisaiRepository.java
java
1@Repository 2public interface MeisaiRepository extends JpaRepository<Meisai, Integer> { 3 4 @Query(value="SELECT*FROM meisai_tbl where goalseq_id=:ID and delete_flg=false",nativeQuery = true) 5public Meisai findByGoalSeq(@Param("ID")Integer goalseqid ); 6}
サービス
①GoalSeqService.java
java
1@Service 2public class GoalSeqService { 3 @Autowired 4 private GoalSeqRepository repository; 5 //goalseq_idの情報を1個取ってくる 6 public GoalSeq findCurrentOne(Integer goalseqid){ 7 return repository.findCurrentOne(goalseqid); 8 } 9 public GoalSeq save(GoalSeq goalseq) { 10 return repository.save(goalseq); 11 } 12 }
②MeisaiService.java
java
1@Service 2public class MeisaiService { 3 @Autowired 4 private MeisaiRepository repository; 5 //1目標ごとに紐づけられているmeisai_tblの情報をとってくる 6 public Meisai findByGoalSeq(Integer goalseqid ) { 7 return repository.findByGoalSeq(goalseqid ); 8 } 9 public Meisai save(Meisai meisai) { 10 return repository.save(meisai); 11 } 12 }
フォーム
①GoalSeqForm.java
java
1public class GoalSeqForm { 2 3 private String goaltitle; 4 private String year; 5 private String goaldetail; 6 private String goalweight; 7} 8getter,setter省略 9
②MeisaiForm.java
java
1public class MeisaiForm { 2 3 private String selfmidcmt; 4 private String bossmidcmt; 5 private String selfendcmt; 6 private String bossendcmt; 7 private Boolean firstrvwck; 8 private Boolean midrvwck; 9 private Boolean endrvwck; 10} 11getter,setter省略 12
コントローラー
DisplayController.java
java
1@Controller 2public class DisplayController { 3 @Autowired 4 UserMasterService usermasterservice; 5 @Autowired 6 GoalSeqService goalseqservice; 7 @Autowired 8 MeisaiService meisaiservice; 9//getメソッド 10 @RequestMapping("goals/goal_input/{id}/{goalseqid}") 11 public String createInput() { 12//リストで表示したものから1つの情報を取得するメソッドがありますがそこは問題ないので省略します 13 return "goals/goal_input"; 14 } 15//postメソッド 16 @RequestMapping(path="goals/goal_complate/{id}/{goalseqid}",method=RequestMethod.POST) 17 public String cpeateComplete(@PathVariable Integer goalseqid, GoalSeqForm goalseqform,MeisaiForm meisaiform) { 18//初期値に入っていたデータのdeleteflgをtrueにして画面に表示させなくする処理をしています 19 GoalSeq goalseq=goalseqservice.findCurrentOne(goalseqid); 20 goalseq.setDeleteflg(true); 21 goalseqservice.save(goalseq); 22 23 Meisai meisaigoal=meisaiservice.findByGoalSeq(goalseqid); 24 meisaigoal.setDeleteflg(true); 25 meisaiservice.save(meisaigoal); 26//ここから新規登録の処理です、2つのテーブルに別れています。 27 GoalSeq goal=new GoalSeq(); 28 goal.setGoaltitle(goalseqform.getGoaltitle()); 29 goal.setGoaldetail(goalseqform.getGoaldetail()); 30 goal.setGoalweight(goalseqform.getGoalweight()); 31 goal.setYear(goalseq.getYear()); 32 goal.setUserid(goalseq.getUserid()); 33 goal.setGoalid(goalseq.getGoalid()); 34 goal.setUpdatedby(goalseq.getUserid().getId()); 35 goalseqservice.save(goal); 36 37 Meisai meisai=new Meisai(); 38 meisai.setSelfmidcmt( meisaiform.getSelfmidcmt()); 39 meisai.setBossmidcmt(meisaiform.getBossmidcmt()); 40 meisai.setSelfendcmt(meisaiform.getSelfendcmt()); 41 meisai.setBossendcmt(meisaiform.getBossendcmt()); 42 meisai.setFirstrvwck(meisaiform.getFirstrvwck()); 43 meisai.setMidrvwck(meisaiform.getMidrvwck()); 44 meisai.setEndrvwck(meisai.getEndrvwck()); 45 meisai.setUpdatedby(goalseq.getUserid().getId()); 46 meisaiservice.save(meisai); 47 48 return "redirect:/goals/goal_list"+goal.getGoalid(); 49 50 }
HTML
goal_input.html
初期値に前の画面から取ってきた値を入れていますがそこは成功しているのでjava側の記述を省略しています。
html
1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8"> 5<title>Insert title here</title> 6</head> 7<body> 8 <h1>会社目標一覧</h1> 9 <table> 10 <tr> 11 <th>年度</th> 12 <th>会社目標</th> 13 <th>部目標</th> 14 <th>チーム目標</th> 15 </tr> 16 <!-- th:object 1行分取ってくる --> 17 <tr th:object="${cogoal}"> 18 <td th:text="*{year}"></td> 19 <td th:text="*{cogoal}"></td> 20 21 <td th:text="${deptgoal.deptgoal}"></td> 22 <td th:text="${teamgoal.teamgoal}"></td> 23 </tr> 24 </table> 25 26 <form method="post" 27 th:action="@{/goals/goal_complate/{id}/{goalseqid}(id=${userid.id},goalseqid=${goalseq.id})}"> 28 <table> 29 <tr> 30 <th>目標番号</th> 31 <th>年度</th> 32 <th>目標タイトル</th> 33 <th>目標詳細</th> 34 <th>ウェイト</th> 35 <th>期中本人コメント</th> 36 <th>期中上長コメント</th> 37 <th>期末本人コメント</th> 38 <th>期末上長コメント</th> 39 <th>期初レビュー確認</th> 40 <th>期中レビュー確認</th> 41 <th>期末レビュー確認</th> 42 </tr> 43 <tr th:object="${goalseq}"> 44 <td th:text="*{goalid}"><input type="text"></td> 45 <td ><input type="text" name="year" th:value="*{year}"></td> 46 <td><input type="text" name="goaltitle" th:value="*{goaltitle}"></td> 47 <td><input type="text" name="goaldetail" th:value="*{goaldetail}"></td> 48 <td><input type="text" name="goalweight" th:value="*{goalweight}"></td> 49 <td><input type="text" name="selfmidcmt" th:value="*{selfmidcmt}"></td> 50 <td><input type="text" name="bossmidcmt"th:value="*{bossmidcmt}"></td> 51 <td><input type="text" name=" selfendcmt" th:value="*{selfendcmt}"></td> 52 <td><input type="text" name="bossendcmt" th:value="*{bossendcmt}"></td> 53 <td><select name="firstrvwck"> 54 <option value="false" th:selected="*{firstrvwck} == false">未</option> 55 <option value="true" th:selected="*{firstrvwck} == true">済</option> 56 </select></td> 57 <td><select name="midrvwck"> 58 <option value="false" th:selected="*{midrvwck} == false">未</option> 59 <option value="true" th:selected="*{midrvwck} == true">済</option> 60 </select></td> 61 <td><select name="endrvwck"> 62 <option value="false" th:selected="*{endrvwck} == false">未</option> 63 <option value="true" th:selected="*{endrvwck} == true">済</option> 64 </select></td> 65 </table> 66 <input type="submit" value="登録する" /> 67 </form> 68 69 70</body> 71</html>
試したこと
・デバックをして登録ボタンを押したらどこまで値が取得できているか見てみた
画面
値受け取り状況
goalseq
〇→year,goaldetail,goaltitle,goalweight
meisai
〇→firstrvwck,midrvwck,endrvwck,selfmidcmt,bossmidcmt,bossendcmt
×→,selfendcmt
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー