🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

9825閲覧

Spring insert時のSQLエラー(Unknown column 'boss_end_cmt' in 'field list')

chocolate_pie

総合スコア26

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2019/12/18 10:51

編集2019/12/19 00:51

前提・実現したいこと

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/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/12/18 10:59

テーブルの情報は画像よりもCREATE TABLE文で提示いただいた方が手元でも確認できるの助かります。
m.ts10806

2019/12/18 11:00

あと念のため、DBに対して直接同じSQL(プリペアドステートメント部分は固定値で)を実行して想定の情報が返ってくるかは必ず確認しておいてください。
chocolate_pie

2019/12/18 11:16 編集

コメントありがとうございます。DDL情報を追記させていただきました。 また、リポジトリ内のSQL文も正常に実行できております。 よろしくお願いいたします。
rubytomato

2019/12/18 15:24

下記の点について疑問がありましたので、差し支えなければ質問内容の修正をお願いします。 1) GoalSeqエンティティクラスの省略されているコードに原因があるかもしれませんので、略さずに記載してください。(getter/setterは不要です。) > 略 > Meisaiのエンティティ部分(内部結合している) 2) GoalSeqService、MeisaiServiceクラスのsaveメソッドのコードを記載してください。 3) 掲載されているコードを読む限り、コード上ではGoalSeqエンティティとMeisaiエンティティは関連を持たない(OneToOneアノテーションを使わない)ようですが、それは意図通り(設計通り)の実装ということでしょうか?
chocolate_pie

2019/12/19 01:34 編集

追記させていただきました。文字数制限の関係で、DDL情報を消してしまいましたので、ここに記させていただきます。3に関しては、意図通りの実装です。申し訳ございませんが、よろしくお願いいたします。 ```DDL CREATE TABLE goals_seq ( id INT NOT NULL AUTO_INCREMENT, user_id INT, goal_id INT, goal_title VARCHAR(255), goal_detail VARCHAR(1000), goal_weight VARCHAR(10), updated_at TIMESTAMP(0), updated_by INT, delete_flg BIT NOT NULL, created_at TIMESTAMP(0), year VARCHAR(4), CONSTRAINT PRIMARY KEY (id) ); CREATE TABLE meisai_tbl ( meisai_id INT NOT NULL AUTO_INCREMENT, goalseq_id INT, self_mid_cmt VARCHAR(1000), boss_mid_cmt VARCHAR(1000), self_end_cmt VARCHAR(1000), boss_end_cmt VARCHAR(1000), first_rvw_ck BIT NOT NULL, mid_rvw_ck BIT NOT NULL, end_rvw_ck BIT NOT NULL, updated_at TIMESTAMP(0), updated_by INT, delete_flg BIT NOT NULL, created_at TIMESTAMP(0), CONSTRAINT PRIMARY KEY (meisai_id) ); ``` 文字数の関係で、 両テーブルupdated_atから下の4つのエンティティの記述は省略しています。
rubytomato

2019/12/19 01:23

追記ありがとうございました。 もう1点確認させて頂きたいのですが、両テーブルの主キーに AUTO_INCREMENT が無いようですが、これでいいのでしょうか?
chocolate_pie

2019/12/19 01:33

大変失礼しました。AUTO_INCREMENTの記述が抜けてしまいましたが、テーブル作成時には記述してあります。よろしくお願いいたします。
guest

回答1

0

ベストアンサー

エラーの原因は、GoalSeqエンティティに実テーブルにないフィールドをマッピングしていることだと思います。

コントローラの処理を読む限り、GoalSeqとMeisaiは別々に処理しているようなので、Native QueryでJOINする必要は無いように思いました。

具体的には、コントローラでは下記のように別々にエンティティを検索しているので、

Java

1//postメソッド 2@RequestMapping(path="goals/goal_complate/{id}/{goalseqid}",method=RequestMethod.POST) 3public String cpeateComplete(@PathVariable Integer goalseqid, GoalSeqForm goalseqform,MeisaiForm meisaiform) { 4 5 //初期値に入っていたデータのdeleteflgをtrueにして画面に表示させなくする処理をしています 6 GoalSeq goalseq=goalseqservice.findCurrentOne(goalseqid); 7 8 // 省略 9 10 Meisai meisaigoal=meisaiservice.findByGoalSeq(goalseqid); 11 12 // 省略

GoalSeqエンティティにMeisaiエンティティのフィールドを持たせ、リポジトリでmeisai_tblをJOINして取得する必要はないという判断です。

@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) public GoalSeq findCurrentOne(@Param("ID")Integer goalseqid);

修正箇所

下記に関連する箇所の修正内容を記載しましたのでご確認ください。なお動作確認していないので参考程度にしてください。
また、修正内容を把握しやすいように元のコードはコメントアウトして残してあります。

GoalSeq

**(1) : ** エラーの原因は、実テーブルにないカラムをマッピングしていることなので削除します。

Java

1@Entity 2@Table(name="goals_seq") 3public class GoalSeq { 4 5 @Id 6 @Column(name="id") 7 @GeneratedValue(strategy = GenerationType.IDENTITY) 8 private Integer id; 9 10 @ManyToOne(targetEntity = UserMaster.class) 11 @JoinColumn(nullable = false, name = "user_id") 12 private UserMaster userid; 13 14 @Column(name="goal_id") 15 private Integer goalid; 16 17 @Column(name="goal_title") 18 private String goaltitle; 19 20 @Column(name="goal_detail") 21 private String goaldetail; 22 23 @Column(name="goal_weight") 24 private String goalweight; 25 26 @Column(name="year") 27 private String year; 28 29/* (1) Comment out 30//Meisaiのエンティティ部分(内部結合しているのでこちらでも記述します) 31 32 @Column(name = "self_mid_cmt") 33 private String selfmidcmt; 34 35 @Column(name = "boss_mid_cmt") 36 private String bossmidcmt; 37 38 @Column(name = "self_end_cmt") 39 private String selfendcmt; 40 41 @Column(name = "boss_end_cmt") 42 private String bossendcmt; 43 44 @Column(name = "first_rvw_ck") 45 private Boolean firstrvwck; 46 47 @Column(name = "mid_rvw_ck") 48 private Boolean midrvwck; 49 50 @Column(name = "end_rvw_ck") 51 private Boolean endrvwck; 52*/ 53}

Meisai

**(2) : ** 実テーブルにあるカラムなのに、エンティティクラスにマッピングされていないので追加します。
このフィールドはGoalSeqとMeisaiを関連付けるために必要です。

@Entity @Table(name = "meisai_tbl") public class Meisai { @Id @Column(name = "meisai_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer meisaiid; // (2) Add @Column(name = "goalseq_id") private Integer goalseqid; @Column(name = "self_mid_cmt") private String selfmidcmt; @Column(name = "boss_mid_cmt") private String bossmidcmt; @Column(name = "self_end_cmt") private String selfendcmt; @Column(name = "boss_end_cmt") private String bossendcmt; @Column(name = "first_rvw_ck") private Boolean firstrvwck; @Column(name = "mid_rvw_ck") private Boolean midrvwck; @Column(name = "end_rvw_ck") private Boolean endrvwck; }

GoalSeqRepository

**(3) : **Native Queryは **(4) : **のメソッドで対応できるので変更します。(必須の修正ではありません)

Java

1@Repository 2public interface GoalSeqRepository extends JpaRepository<GoalSeq, Integer> { 3 4 // (3) Comment out 5 // @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) 6 // public GoalSeq findCurrentOne(@Param("ID")Integer goalseqid); 7 8 // (4) Add 9 public GoalSeq findByIdAndDeleteFlg(Integer id, Boolean deleteFlg); 10}

※なお、Native Queryを使いたい場合は

SQL

1SELECT * 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

INNER JOIN meisai_tbl ... を削除します。

SQL

1SELECT * FROM goals_seq where goals_seq.delete_flg = false and goals_seq.id=:ID

GoalSeqService

**(5),(6) : ** リポジトリを変えた場合は下記の対応が必要です。

Java

1@Service 2public class GoalSeqService { 3 @Autowired 4 private GoalSeqRepository repository; 5 6 //goalseq_idの情報を1個取ってくる 7 public GoalSeq findCurrentOne(Integer goalseqid) { 8 // (5) Comment out 9 // return repository.findCurrentOne(goalseqid); 10 11 // (6) Add 12 return repository.findByIdAndDeleteFlg(goalseqid, false); 13 } 14}

MeisaiRepository

**(7) : **Native Queryは **(8) : **のメソッドで対応できるので変更します。 (必須の修正ではありません)

Java

1@Repository 2public interface MeisaiRepository extends JpaRepository<Meisai, Integer> { 3 4 // (7) Comment out 5 // @Query(value="SELECT*FROM meisai_tbl where goalseq_id=:ID and delete_flg=false",nativeQuery = true) 6 // public Meisai findByGoalSeq(@Param("ID")Integer goalseqid ); 7 8 // (8) Add 9 public Meisai findByGoalseqidAndDeleteFlg(Integer goalseqid, Boolean deleteFlg); 10}

MeisaiService

**(9),(10) : ** リポジトリを変えた場合は下記の対応が必要です。

Java

1@Service 2public class MeisaiService { 3 @Autowired 4 private MeisaiRepository repository; 5 6 //1目標ごとに紐づけられているmeisai_tblの情報をとってくる 7 public Meisai findByGoalSeq(Integer goalseqid) { 8 // (9) Comment out 9 // return repository.findByGoalSeq(goalseqid); 10 11 // (10) Add 12 return repository.findByGoalseqidAndDeleteFlg(goalseqid, false); 13 } 14}

DisplayController

**(11),(12) : ** 保存したエンティティクラスを受け取るように修正します。
**(13) : ** MeisaiエンティティとGoalSeqエンティティを紐づけるために、GoalSeqのIDをセットします。

Java

1//postメソッド 2@RequestMapping(path="goals/goal_complate/{id}/{goalseqid}",method=RequestMethod.POST) 3public String cpeateComplete(@PathVariable Integer goalseqid, GoalSeqForm goalseqform, MeisaiForm meisaiform) { 4 //初期値に入っていたデータのdeleteflgをtrueにして画面に表示させなくする処理をしています 5 GoalSeq goalseq = goalseqservice.findCurrentOne(goalseqid); 6 goalseq.setDeleteflg(true); 7 goalseqservice.save(goalseq); 8 9 Meisai meisaigoal = meisaiservice.findByGoalSeq(goalseqid); 10 meisaigoal.setDeleteflg(true); 11 meisaiservice.save(meisaigoal); 12 13 //ここから新規登録の処理です、2つのテーブルに別れています。 14 GoalSeq goal = new GoalSeq(); 15 goal.setGoaltitle(goalseqform.getGoaltitle()); 16 goal.setGoaldetail(goalseqform.getGoaldetail()); 17 goal.setGoalweight(goalseqform.getGoalweight()); 18 goal.setYear(goalseq.getYear()); 19 goal.setUserid(goalseq.getUserid()); 20 goal.setGoalid(goalseq.getGoalid()); 21 goal.setUpdatedby(goalseq.getUserid().getId()); 22 // (11) Comment out 23 // goalseqservice.save(goal); 24 // (12) Add 25 GoalSeq savedGolaSeq = goalseqservice.save(goal); 26 27 Meisai meisai = new Meisai(); 28 // (13) Add 29 meisai.setGoalseqid(savedGolaSeq.getId()); 30 meisai.setSelfmidcmt(meisaiform.getSelfmidcmt()); 31 meisai.setBossmidcmt(meisaiform.getBossmidcmt()); 32 meisai.setSelfendcmt(meisaiform.getSelfendcmt()); 33 meisai.setBossendcmt(meisaiform.getBossendcmt()); 34 meisai.setFirstrvwck(meisaiform.getFirstrvwck()); 35 meisai.setMidrvwck(meisaiform.getMidrvwck()); 36 meisai.setEndrvwck(meisai.getEndrvwck()); 37 meisai.setUpdatedby(goalseq.getUserid().getId()); 38 meisaiservice.save(meisai); 39 40 return "redirect:/goals/goal_list"+goal.getGoalid(); 41 42}

最後に

解決案を提示しているのに矛盾しているようですが、個人的にはこの修正はお勧めできません。

このご質問は以前の(Springビルド失敗 (No property goalSeq found for type Meisai!))に関連するものだと思いますが、GoalSeqエンティティとMeisaiエンティティのリレーションを設定しても動作するようにするのが最善の対応だと思います。
とはいえ、そうできない理由もおありでしょうからアドバイスにとどめます。

それからもう1点だけアドバイスさせてください。
コードを見ていて気になったのですが、Javaではフィールド名はキャメルケース(ローワーキャメルケース)にするのが一般的です。

たとえば、これらは

Java

1private Integer goalid; 2 3private String goaltitle; 4 5private String selfmidcmt;

↓ このようにします。

Java

1private Integer goalId; 2 3private String goalTitle; 4 5private String selfMidCmt;

この先、コードレビューを受けることになっているのであれば、指摘が入るかもしれません。

投稿2019/12/19 02:10

rubytomato

総合スコア1752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chocolate_pie

2019/12/19 02:55

ご回答ありがとうございます。 前回の質問の答えを参考にしてOneToOneを利用してエラーを解決しようと思います。 今回もご丁寧に回答いただきありがとうございました…!非常に分かりやすかったです。 命名規則までアドバイスいただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問