前提・実現したいこと
DBのデータを表示する機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
上からCaused byが4つありましたので記します。
エラーメッセージ ①Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'meisaiService': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'meisaiRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract jp.co.itc.mbo.entity.Meisai jp.co.itc.mbo.repository.MeisaiRepository.findByGoalSeq(jp.co.itc.mbo.entity.GoalSeq)! No property goalSeq found for type Meisai! ②Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'meisaiRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract jp.co.itc.mbo.entity.Meisai jp.co.itc.mbo.repository.MeisaiRepository.findByGoalSeq(jp.co.itc.mbo.entity.GoalSeq)! No property goalSeq found for type Meisai! ③Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract jp.co.itc.mbo.entity.Meisai jp.co.itc.mbo.repository.MeisaiRepository.findByGoalSeq(jp.co.itc.mbo.entity.GoalSeq)! No property goalSeq found for type Meisai! ④Caused by: org.springframework.data.mapping.PropertyReferenceException: No property goalSeq found for type Meisai!
該当のソースコード
エンティティ
java
1 2Meisai.java 3@Entity 4@Table(name = "meisai_tbl") 5public class Meisai { 6 7 @Id 8 @Column(name = "meisai_id") 9 @GeneratedValue(strategy = GenerationType.IDENTITY) 10 private int meisaiid; 11 12 @OneToOne(targetEntity = GoalSeq.class) 13 @JoinColumn(name = "goalseq_id") 14 private GoalSeq goalseqid; 15
java
1GoalSeq.java 2@Entity 3@Table(name="goals_seq") 4public class GoalSeq { 5 @Id 6 @Column(name="id") 7 @GeneratedValue(strategy = GenerationType.IDENTITY)//自動採番 8 private int id; 9 10 @OneToOne(mappedBy = "goalseqid", cascade = CascadeType.ALL) 11 private Meisai meisai; 12//useridをユーザマスタエンティティから参照していますがユーザマスタエンティティの記述は省略します 13 @ManyToOne(targetEntity = UserMaster.class) 14 @JoinColumn(nullable = false, name = "user_id") 15 private UserMaster userid;
リポジトリ
java
1MeisaiRepository.java 2@Repository 3public interface MeisaiRepository extends JpaRepository<Meisai, Integer> { 4 public Meisai findByGoalSeq(GoalSeq goalseq); 5}
java
1GoalSeqRepository.java 2@Repository 3public interface GoalSeqRepository extends JpaRepository<GoalSeq,Integer>{ 4 @Query(value="SELECT * FROM goals_seq where delete_flg=false and user_id=:ID order by goal_id DESC ",nativeQuery = true) 5 public List <GoalSeq> findCurrent(@Param("ID")int userid); 6}
サービス
java
1MeisaiService.java 2 3@Service 4public class MeisaiService { 5 //1目標ごとに紐づけられているmeisai_tblの情報をとってくる 6 public Meisai findByGoalSeq(GoalSeq goalseq) { 7 return repository.findByGoalSeq(goalseq); 8 } 9 10 public Meisai save(Meisai meisai) { 11 return repository.save(meisai); 12 } 13 }
java
1GoalSeqService.java 2@Service 3public class GoalSeqService { 4 5 //有効なuseridが含まれるレコードをとってくる 6 public List<GoalSeq> findCurrent(int userid) { 7 return repository.findCurrent( userid); 8 9 public GoalSeq save(GoalSeq goalseq) { 10 return repository.save(goalseq); 11 } 12}
コントローラー
java
1@Controller 2public class DisplayController { 3@Autowired 4 GoalSeqService goalseqservice; 5 @Autowired 6 MeisaiService meisaiservice; 7@Autowired 8 UserMasterService usermasterservice; 9 @RequestMapping("/{id}") //idはユーザのIDだよ 10 public String showGoal(@PathVariable int id, Model model) { 11 12 //ユーザ情報の取得 13 UserMaster usermaster = usermasterservice.findOne(id); 14 15 16 //自分の目標内容とウェイトを表示す 17 int userid = usermaster.getId(); 18 List<GoalSeq> goalseqs = goalseqservice.findCurrent(userid); 19 model.addAttribute("goalseqs", goalseqs); 20 21 //本人、上長コメントを表示する 22 Meisai meisai0 = meisaiservice.findByGoalSeq(goalseqs.get(0)); 23 Meisai meisai1 = meisaiservice.findByGoalSeq(goalseqs.get(1)); 24 Meisai meisai2 = meisaiservice.findByGoalSeq(goalseqs.get(2)); 25 Meisai meisai3 = meisaiservice.findByGoalSeq(goalseqs.get(3)); 26 Meisai meisai4 = meisaiservice.findByGoalSeq(goalseqs.get(4)); 27 28 model.addAttribute("meisai0", meisai0); 29 model.addAttribute("meisai1", meisai1); 30 model.addAttribute("meisai2", meisai2); 31 model.addAttribute("meisai3", meisai3); 32 model.addAttribute("meisai4", meisai4); 33 34 return "goals/goal_list"; 35 36 } 37 38} 39 40
12/17追記 Goalseq goalseqidに関するものを以下に修正しました。
が、同じようなエラーが出てしまいました。
エラー文 Caused by: org.springframework.data.mapping.PropertyReferenceException: No property goalSeq found for type Meisai! Did you mean 'goalseq'?
java
1エンティティ 2①Meisaiエンティティ 3@OneToOne(targetEntity = GoalSeq.class) 4 @JoinColumn(name = "goalseq_id") 5 private GoalSeq goalseq; 6 7②GoalSeqエンティティ 8@OneToOne(mappedBy = "goalseq", cascade = CascadeType.ALL) 9 private Meisai meisai;
java
1Meisaiリポジトリ 2public interface MeisaiRepository extends JpaRepository<Meisai, Integer> { 3 4 public Meisai findByGoalSeq(GoalSeq goalseq); 5}
java
1Meisaiサービス 2 public Meisai findByGoalSeq(GoalSeq goalseq) { 3 return repository.findByGoalSeq(goalseq); 4 }
試したこと
・OneToOneの書き方が間違っていないか確認した
・MeisaiサービスとリポジトリのfindByGoalSeq変数が含まれるところをコメントアウトしたらビルドが通るが、コメントアウトした部分のデータを取る書き方が分からず困った。
補足情報(FW/ツールのバージョンなど)
DB定義情報です。
Meisai_tbl
goals_seq
goals_seqのidをMeisaiのgoalseq_idに紐づけたいです。
数時間調べても分かりませんでした、初心者で至らない部分が多数ありますがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/17 01:16
2019/12/17 01:26
2019/12/17 01:58
2019/12/17 02:01
2019/12/17 02:09
2019/12/17 02:24
2019/12/17 04:25
2019/12/17 11:35
2019/12/18 09:20