\study設定-ラベル/地域
20338 ワード
JsonProcessingException
JsonProcessingExceptionは、IOExceptionを継承するChecked Exceptionです.そこで、throwsで上級者に伝える方法でも、自分でボールを受け取ってthrowsを投げてみましょう.これは文法上の強制的な選択です.これに対し、Unchecked Exceptionでは明示的な例外処理は不要です.
必要に応じてデータを読み込むだけです.タグと地域情報をAjaxに変更すると、すべての研究(+メンバー、+管理者、+タグ、+地域)情報が
何で持ってくるの? スプリングデータJPAメソッドを作成し、@Entity Graphと@NamedEntity Graphを使用 WithZonesはSpringData JPAにとって意味がなく無害なキーワードなので、クエリはfindByPathと同じですが、他の@EntityGraphを適用できます. 2つのクエリーが発生しました.タグを削除すると、クエリー学習が開始されます.どうしたんですか.学習状況を調べる.タグを削除できるのはインポートのみです.インポート時に学習グループがあるかどうかをチェックし、権限もチェックします.
findByPathをインポートする場合、つまり学習情報をインポートしてtagを変更する場合は、すべてのデータを以前と同じようにインポートすべきですか?以前使用していたformをクエリーすると、すべてのデータがインポートされます.でもtagを入れて取る時も全部持って帰るんですか?メンバー、マネージャ、ラベルリスト、地域リストなど...->いいえ!😋😋
優先的に変更する権限があるかどうかを知る必要があります(マネージャが必要かどうか).また、タグ情報を変更する必要があるため、関連関係をインポートする必要があります.そのまま持ってきました.
StudySettingsController.java
StudyRepository.java
これは、同じクエリーに名前を付けるのに異なるメソッドを使用しますが、異なるエンティティを使用します.
Studioの状態はJPAの観点からどのような状態か AccountServiceと比較します. SettingsController.JAva:プロファイル情報を変更するコントローラ
AccountService.java
SettingsSettings Controller.java
したがって、サービスではリポジトリStudioを介してクエリーする必要はありません.
ビュー重複コードの削除
コードクリップを繰り返します.htmlを入れて置き換えます.
⭐ Point ⭐
クエリーでは、どのクエリーが発生したのか、いつ発生したのか、なぜ発生したのかを把握します.そのクエリーが本当に必要なデータを持ってきたかどうかを判断できるはずです!
出典:インフラストラクチャ白旗仙のSpringとJPAベースのWebアプリケーション開発
https://cheese10yun.github.io/checked-exception/
JsonProcessingExceptionは、IOExceptionを継承するChecked Exceptionです.そこで、throwsで上級者に伝える方法でも、自分でボールを受け取ってthrowsを投げてみましょう.これは文法上の強制的な選択です.これに対し、Unchecked Exceptionでは明示的な例外処理は不要です.
必要に応じてデータを読み込むだけです.
何で持ってくるの?
findByPathをインポートする場合、つまり学習情報をインポートしてtagを変更する場合は、すべてのデータを以前と同じようにインポートすべきですか?以前使用していたformをクエリーすると、すべてのデータがインポートされます.でもtagを入れて取る時も全部持って帰るんですか?メンバー、マネージャ、ラベルリスト、地域リストなど...->いいえ!😋😋
優先的に変更する権限があるかどうかを知る必要があります(マネージャが必要かどうか).また、タグ情報を変更する必要があるため、関連関係をインポートする必要があります.そのまま持ってきました.
StudySettingsController.java
@PostMapping("/tags/add")
@ResponseBody
public ResponseEntity addTag(@CurrentAccount Account account, @PathVariable String path,
@RequestBody TagForm tagForm) {
Study study = studyService.getStudyToUpdateTag(account, path);
Tag tag = tagService.findOrCreateNew(tagForm.getTagTitle()); //findOrCreateNew 중복코드가 생길 수 있기 때문에 코드를 빼준다.
studyService.addTag(study, tag);
return ResponseEntity.ok().build();
}
@PostMapping("/tags/remove")
@ResponseBody
public ResponseEntity removeTag(@CurrentAccount Account account, @PathVariable String path,
@RequestBody TagForm tagForm) {
Study study = studyService.getStudyToUpdateTag(account, path);
Tag tag = tagRepository.findByTitle(tagForm.getTagTitle());
if (tag == null) {
return ResponseEntity.badRequest().build(); //없는 경우에는 bad request로 응답 보내기
}
studyService.removeTag(study, tag);
return ResponseEntity.ok().build();
}
StudyService.java // 모든 연관관계를 다 가져온다.
public Study getStudyToUpdateTag(Account account, String path) {
Study study = repository.findAccountWithTagsByPath(path);
checkIfExistingStudy(path, study);
checkIfManager(account, study);
return study;
}
getStudyToUpdateTagという新しいサービス方法が作成されました.ここでfindAccountWithTagsByPathという名前のrepositoryメソッドを作成します.StudyRepository.java
package com.yuri.studyolle.study;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.transaction.annotation.Transactional;
import com.yuri.studyolle.domain.Study;
@Transactional(readOnly = true)
public interface StudyRepository extends JpaRepository<Study, Long> {
boolean existsByPath(String path);
// 모든 연관관계를 다 가져온다.
@EntityGraph(value = "Study.withAll", type = EntityGraph.EntityGraphType.LOAD)
Study findByPath(String path);
@EntityGraph(value = "Study.withTagsAndManagers", type = EntityGraph.EntityGraphType.FETCH)
Study findAccountWithTagsByPath(String path);
@EntityGraph(value = "Study.withZonesAndManagers", type = EntityGraph.EntityGraphType.FETCH)
Study findAccountWithZonesByPath(String path);
}
実際、ここでfindAccountWithTagsByPath、WithTagsは無視される.JPA処理のキーワードではありません最終的にfindByPathのようなクエリが発生します.これは、同じクエリーに名前を付けるのに異なるメソッドを使用しますが、異なるエンティティを使用します.
Studioの状態はJPAの観点からどのような状態か
@PostMapping(TAGS + "/add")
@ResponseBody
public ResponseEntity addTag(@CurrentAccount Account account, @RequestBody TagForm tagForm) {
Tag tag = tagService.findOrCreateNew(tagForm.getTagTitle());
accountService.addTag(account, tag);
return ResponseEntity.ok().build();
}
ここでaccountオブジェクトは分離状態にあります.永続状態オブジェクトではありません!AccountService.java
public void addTag(Account account, Tag tag) {
Optional<Account> byId = accountRepository.findById(account.getId());
byId.ifPresent(a -> a.getTags().add(tag)); // id가 있으면 account에 tag 추가하기
}
分離状態にあるオブジェクトがデータを変更して認識できるようにするには、dbからJPAを介してインポートする必要があります.(トランザクションにインポートする必要があります...)SettingsSettings Controller.java
@PostMapping("/tags/add")
@ResponseBody
public ResponseEntity addTag(@CurrentAccount Account account, @PathVariable String path,
@RequestBody TagForm tagForm) {
Study study = studyService.getStudyToUpdateTag(account, path);
Tag tag = tagService.findOrCreateNew(tagForm.getTagTitle()); //findOrCreateNew 중복코드가 생길 수 있기 때문에 코드를 빼준다.
studyService.addTag(study, tag);
return ResponseEntity.ok().build();
}
では、ここの学習対象はどんな状態ですか.継続状態.永続コンテキストが開きました.開いている場合は、リポジトリからインポートします.したがって、サービスではリポジトリStudioを介してクエリーする必要はありません.
ビュー重複コードの削除
コードクリップを繰り返します.htmlを入れて置き換えます.
⭐ Point ⭐
クエリーでは、どのクエリーが発生したのか、いつ発生したのか、なぜ発生したのかを把握します.そのクエリーが本当に必要なデータを持ってきたかどうかを判断できるはずです!
出典:インフラストラクチャ白旗仙のSpringとJPAベースのWebアプリケーション開発
https://cheese10yun.github.io/checked-exception/
Reference
この問題について(\study設定-ラベル/地域), 我々は、より多くの情報をここで見つけました https://velog.io/@leyuri/스터디-설정-태그지역テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol