[解決済み] Spring Data JPA findOne() change to Optional how to use this?
質問
私は勉強しています。
SpringBoot2.0
で
Java8
.
そして、私はいくつかのブログ作成チュートリアルの例に従いました。
チュートリアルのソースコードは
@GetMapping("/{id}/edit")
public String edit(@PathVariable Long id, Model model) {
model.addAttribute("categoryDto", categoryService.findOne(id));
return "category/edit";
}
しかし、このコードはこのエラーを投げています。
categoryService.findOne(id)
JPAを変更しようと思っているのですが
findOne()
メソッドを
Optional< S >
それを解決する方法は?
もっと詳しく
これはcategoryServiceのメソッドです。
public Category findOne(Long id) {
return categoryRepository.findOne(id);
}
どのように解決するのですか?
少なくともから
2.0
バージョンでは
Spring-Data-Jpa
修正済み
findOne()
.
今すぐ
findOne()
は同じ署名でも同じ動作でもありません。
以前は、定義された
CrudRepository
というインタフェースで定義されていました。
T findOne(ID primaryKey);
では、単一の
findOne()
の中にあるメソッド
CrudRepository
で定義されているものは
QueryByExampleExecutor
というインタフェースで定義されています。
<S extends T> Optional<S> findOne(Example<S> example);
これを最終的に実装しているのが
SimpleJpaRepository
のデフォルトの実装である
CrudRepository
インタフェースを実装しています。
このメソッドは例題検索によるクエリであり、その代わりにはならないでしょう。
実際、同じ動作をするメソッドは新しいAPIでも残っていますが、メソッド名が変更されています。
から改名されました。
findOne()
から
findById()
の中に
CrudRepository
インタフェースになります。
Optional<T> findById(ID id);
今度は
Optional
を防ぐにはそれほど悪いことではありません。
NullPointerException
.
では、実際に呼び出すメソッドは
Optional<T> findById(ID id)
.
その使い方は?
学習する
Optional
の使い方を説明します。
ここでは、その仕様に関する重要な情報をお伝えします。
NULLでない値を含むか含まないかのコンテナオブジェクト。もし 値が存在する場合、isPresent() は真を返し、get() は値を返します。 が値を返します。
が存在するかどうかに依存する追加のメソッドが提供されています。 orElse() (値が存在しない場合、デフォルト値を返す) や ifPresent() (値が存在する場合、実行する) などです。 やifPresent() (値が存在する場合にコードブロックを実行する)などのメソッドがあります。 などがあります。)
を使用するためのいくつかのヒント
Optional
と
Optional<T> findById(ID id)
.
一般に、idでエンティティを探すと、それを返したり、それが取得できなかった場合に特定の処理を行いたいものです。
ここでは3つの古典的な使用例を紹介します。
- もしエンティティが見つかったらそれを取得したい、そうでなければデフォルト値を取得したいとします。
と書くことができます。
Foo foo = repository.findById(id)
.orElse(new Foo());
を取得するか、あるいは
null
のデフォルト値を取得することもできます(API変更前と同じ動作です).
Foo foo = repository.findById(id)
.orElse(null);
- エンティティが見つかればそれを返し、見つからなければ例外を投げたいとします。
と書くことができます。
return repository.findById(id)
.orElseThrow(() -> new EntityNotFoundException(id));
- エンティティが見つかったかどうかによって異なる処理を適用したいとします(必ずしも例外を投げる必要はありません)。
と書くことができます。
Optional<Foo> fooOptional = fooRepository.findById(id);
if (fooOptional.isPresent()) {
Foo foo = fooOptional.get();
// processing with foo ...
} else {
// alternative processing....
}
関連
-
NullPointerException - java.lang.
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
FindBugの使用概要
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] Spring Bootアプリケーションにポートを設定する方法
-
[解決済み] Spring Frameworkの@Injectと@Autowiredの違いは何ですか?どのような条件でどちらを使うか?
-
[解決済み] Spring DataでOrderByをfindAllで使用する方法
-
[解決済み】HibernateとSpring Data JPAの違いは何ですか?
-
[解決済み] Spring-data-jpaを使用してエンティティを更新するにはどうすればよいですか?
-
[解決済み] Spring Data JPAでgetOneとfindOneメソッドを使用する場合
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。
-
NullPointerException - java.lang.
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
javaの非静的メソッドを静的に参照することができない
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
ecplise プロンプトが表示されます。"選択したものは起動できません。" "最近の起動はありません。"