「spring boot プログラミング入門」という書籍で学習を続けていたのですが、問題が発生してしまいました。
該当の箇所は、Chapter5.2内のコードです。
以下はコントローラークラスのHeloController.javaです。
package com.test.springboot;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
// import javax.transaction.Transactional;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
// import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.shinya.springboot.repositories.MyDataRepository;
@Controller
public class HeloController {
@Autowired
MyDataRepository repository;
@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
public ModelAndView edit(@ModelAttribute MyData mydata, @PathVariable int id, ModelAndView mav) {
mav.setViewName("edit");
mav.addObject("title", "edit mydata.");
MyData data = repository.findById((long)id);
mav.addObject("formModel",data);
System.out.println("ok");
return mav;
}
@RequestMapping(value="/edit",method=RequestMethod.POST)
@Transactional(readOnly=false)
public ModelAndView form(@ModelAttribute MyData mydata,ModelAndView mav){
repository.saveAndFlush(mydata);
return new ModelAndView("redirect:/");
}
@PostConstruct
public void init() {
MyData d1 = new MyData();
d1.setName("tuyano");
d1.setAge(123);
d1.setMail("syoda@tuyano.com");
d1.setMemo("this is my data!");
repository.saveAndFlush(d1);
MyData d2 = new MyData();
d2.setName("hanako");
d2.setAge(15);
d2.setMail("hanako@flower");
d2.setMemo("my girl friend");
repository.saveAndFlush(d2);
MyData d3 = new MyData();
d3.setName("sachiko");
d3.setAge(37);
d3.setMail("sachico@happy");
d3.setMemo("my work friend...");
repository.saveAndFlush(d3);
}
}
class DataObject{
private int id;
private String name;
private String value;
public DataObject(int id, String name, String value){
super();
this.id = id;
this.name = name;
this.value = value;
}
public int getId(){ return id;}
public void setId(int id){ this.id = id;}
public String getName() { return name;}
public void setName(String name){
this.name = name;
}
public String getValue(){
return value;
}
public void setValue(String value){
this.value = value;
}
}
以下は、MyDataRepositori.javaです
package com.test.springboot.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.shinya.springboot.MyData;
@Repository
public interface MyDataRepository extends JpaRepository<MyData,Long> {
public MyData findById(Long name);
}
以下は、エンティティクラスのMyData.javaです。
package com.test.springboot;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="mydata")
public class MyData {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private long id;
@Column(length = 50,nullable = false)
private String name;
@Column(length = 200,nullable = true)
private String mail;
@Column(nullable = true)
private Integer age;
@Column(nullable = true)
private String memo;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public Integer getAge(){
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
}
問題点としまして、「HeloController.java」のコードでは、MyData data = repository.findById((long)id);
ここの箇所でエラーが出てしまい、さらに、「MyDataRepositori.java」の public MyData findById(Long name);
ここの箇所でエラーが出てしまい、実行に失敗してしまいます。
Eclipseのクイックフィックスを使用し、public Optional<MyData> findById(Long name);
とすればエラーは解消されますが、以前の質問のエラーに繋がってしまっている状況です。
こちらの問題の解決方法がわかる方がいましたら、教えて貰えれば幸いです
ちなみに、正誤表には該当箇所は載ってませんでした。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.32%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正の依頼
m.ts10806
2020/05/02 10:51 編集
> spring boot プログラミング入門
何度も言ってますが、書籍かえてください。
著者の営業妨害という意図では全くなく、本質的に役に立つかどうかは別の話ですから。
あと、Spring忘れてJavaの基礎をおさめてください。
asahina1979
2020/05/02 11:55
Spring Boot 1.x 向けの書籍で Spring Boot 2.x の勉強してもエラーになるのは当たり前ですね。
その方の書籍で進めたいのなら
https://www.amazon.co.jp/dp/B07KF4R1HT/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1
を買いなおしましょう
aae_11
2020/05/02 17:24
こちらの著者の方の書籍でなくても良いですが、そもそもSpringBootの書籍自体あまりないですよ
aae_11
2020/05/02 17:27 編集
書籍で学習を進める場合は、「Spring Boot 2 プログラミング入門」こちらの購入を検討してみます。
m.ts10806
2020/05/02 18:22
>SpringBootの書籍自体あまりないですよ
小さな本屋しか探してないんですね。そりゃそうだ。
書籍依存でどうもならないのはどの言語も同じ。執筆当時最新だったとしても出版したときには既に古くなってる。
あと何年続けます?その無駄遣い。お金と時間が無限にある人のやり方です。
m.ts10806
2020/05/02 18:23
自身に都合の悪い指摘は全部無視してるからできるようにならない。それだけの話だよ。
aae_11
2020/05/02 18:51 編集
小さな本屋しか探していないと言いましたが、ネットも結構探しましたよ。
そもそもmtsさんSpringBootの書籍あんまり知らないのではないですか?
知らないのに、適当な事言うのはやめた方が良いですよ
m.ts10806
2020/05/02 18:55
「書籍あんまり知らない」を何の根拠があって言ってるのか知らないですが、そもそも言語基礎があればドキュメントとちょっと考える力と調べる力があれば十分です。私はそれで実務でやっていけています。Springもね。
言語基礎がなければ書籍も無理です。
単に私を否定したいだけで指摘を聞き入れないのは如何なものかと。
聞き入れてればとっくに初心者卒業してます。
aae_11
2020/05/02 18:58
小さな本屋しか探していないと言うことは、もっと学習におすすめな書籍を知っているからですよね?
ならばそれを提示してねって話です
m.ts10806
2020/05/02 19:07
この数行程度も読まないんですか?
書いた通り、言語基礎がないと書籍も無理なので、言語基礎をきちんとおさめてから出直してください。
Javaの入門書なら新旧幾らでもあるでしょう。ただ、それでもドキュメント活用できないと初心者からは卒業できません。
具体的な書籍名を挙げないのは知らないからではなく無駄だから。無駄なことを教える人はエンジニアどころかアドバイス向いてません。
aae_11
2020/05/02 19:16 編集
そうやって都合の悪いことから、話をすり替えるのうまいですねw
無駄といっていますが、あなたは今まで書籍で学習してきてないから、知らないだけでしょう。
m.ts10806
2020/05/02 19:23
?
意味が分からない。
「言語基礎がないと書籍も無理」は書籍を知ってるから言えることなんですけど。自身で証明してるじゃないですか。言語基礎がないから書籍使ってもできてない。ドキュメントも活用しない。ちゃんと基礎があればフレームワークのバージョンがあっても違いを吸収して実装できます。
つーか、書籍で学習してないと思ってる人が実務でできてるのだから、真似すれば良いのでは?
結局は否定したいだけで、プログラミング身につける気は一切ないってことですよね。これまでのアドバイス全て踏み倒してきてるところからそう判断できます。
aae_11
2020/05/02 19:27 編集
あなたはどうも、自分が絶対に正しいと思い込んでいる部分があるようですね。
そもそもあなただけのアドバイスだけを取り入れて学習するつもりはなく、様々な方からのアドバイスを元に、考慮し、実践したいと思っていますので。
asahina1979
2020/05/02 19:33
とりあえず未解決問題60件+を正しく解決してください。
また同じ質問(見る角度を変えただけ)の質問を前の質問と言い切るのはどうかと
m.ts10806
2020/05/02 19:39
?意味がわからない。誰も自分だけの話を聞けとは言っていない。普通のエンジニアなら普通に持つのと同じ感覚で指摘しているので、私見ではない。
それに「基礎を学習しよう」という様々な方のアドバイスを無視し続けてるじゃないですか。
一番無視してはいけないアドバイスが無視され続けている。