私のウィズウィズクラスは次のようになります。
<前>ウィズウィズそして私の
User
このようなクラス:
そして私の
@Data
@Entity
public class User {
@Id
Long userID;
@ManyToMany(mappedBy = "admins")
private List<ClassRoom> classRooms = new ArrayList<>();
}
クラス、私は持っています:
そして私役職 そして空JSON (
ClassRoom
)、ユーザーに変化はありません。ウィズウィズまたは空の
@Data
@Entity
public class ClassRoom {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long classRoomID;
@ManyToMany
@JoinTable(name ="classroom_user",
joinColumns = @JoinColumn(name = "classroom_id"),
inverseJoinColumns = @JoinColumn(name = "user_id"))
private List<User> admins = new ArrayList<>();
}
UserController
に追加されない
。
ここの問題は何ですか?どうすればこれを解決できますか?
@PostMapping("user/{id}/c")
User addClassRoom(@PathVariable Long id,@RequestBody ClassRoom newClassRoom)
{
logger.debug(repository.findById(id));
return repository.findById(id)
.map(user -> {
user.getClassRooms().add(newClassRoom);
user.setClassRooms(user.getClassRooms());
return repository.save(user);
})
.orElseGet(() -> {
return null;
});
}
- 解決した方法 # 1
- 解決した方法 # 2
ログを貼り付けてもらえますか? Hibernateはテーブルへの挿入を行っていますか?データベーススキーマはDBに正しく作成されていますか?私がお勧めすることの1つは、@ Table(name = "users")のようなアノテーションを使用して、Userクラスの最上部にカスタムテーブル名を追加することです。ほとんどのSQL方言では、userは予約済みキーワードであるため、常にUserクラスに少し異なるアノテーションを付けることをお勧めします。これにより、Hibernateがそのエンティティのテーブルを作成する際に問題が発生しなくなります。
- 解決した方法 # 3
IMOリポジトリからidでclassRoomを検索する必要があります。新しい場合は、新しいエンティティを作成して最初に保存する必要があります。次に、それをユーザーに割り当てて保存します。 postメソッドから受け取るオブジェクトは、エンティティマネージャーによって作成されたものではありません。
- 解決した方法 # 4
user.setClassRooms(user.getClassRooms());
を使用した後我々しなければならない
user.getClassRooms().add(newClassRoom);
を使用するuserRepository.save(user);
関連記事
- javascript - 角度6、クラス変数は、完了するまで(変更)によって呼び出されたメソッド内から更新されません
- caching - 同じクラス内から呼び出された場合、Springキャッシュ@Cacheableメソッドは無視されます
- HTTP Status 405 - HTTPステータス405:リクエスト方法'POST'サポートされていません:春のセキュリティ
- java - ビューThymeleaf Springからメソッドを呼び出す際のエラー
- Spring Thymeleaf - 春タイムリーフ:HTMLアイテムの表示のためのサービスメソッドブール値の呼び出し
- SecurityContextHolderを更新するSpring Security
- java - スプリングブートの起動時に、“メソッド名はトークンである必要があります”例外
- java - Spring Webfluxで現在のコントローラーメソッドのURLを取得する方法は?
- java - Springの起動時にメソッドを実行する
- java - @TransactionalメソッドのSpring Catch JpaSystemExceptionおよびトランザクションのロールバック
- あいまいなマッピング。メソッドSpring Bootをマップできません
- Spring Cloud Stream Kafka - Spring Cloud Stream Kafka:メソッドは宣言型でなければなりません
- java - メソッドレベルの@OrderアノテーションでSpring @Beanをソートする
- java - モックメソッドの戻り値は、Spring Boot @WebMvcTestでnullです
- Spring AOP:内部プライベートメソッド呼び出しをキャプチャする(@EnableAspectJAutoProxy)
- Spring Lookup Method InjectionがAbstractMethodErrorで失敗する
- python - FormViewのform_validメソッドでコンテキストデータを更新しますか?
- java - Spring Security:405要求メソッド「POST」はサポートされていません
- 他のメソッドスプリングコントローラーにリダイレクトする方法は?
- java - SpringBoot 2はHikariCPを使用してMySQLに接続できません
- java - GETメソッドでオブジェクトをフィルターするオプションのプロパティ
- java - List またはObjectを持つSpring RequestBody。両方の名前は同じ「データ」です
- Springでの@Beanアノテーションと@Componentアノテーションの違いは何ですか?
- EclipseでSpring Boot Kotlinプロジェクトが機能しない
- java - JPAバッチ挿入はパフォーマンスを改善しません
- spring boot - JPA仕様にWHERE IN句を追加する
- java - @CreationTimestampアノテーションが付けられたフィールドの値を設定します
- spring - RestTemplateでの404エラー
ウィズウィズ
user.getClassRooms().add(newClassRoom);
で十分です 必要ありません。カスケード保存操作を実行する必要があります。すべてのカスケードタイプを明示的にリストし、mapedByを使用せず、代わりにjoincolumnsアノテーションを使用してください。