環境
Spring Boot 2.4.0
java 1.8
thymeleaf 3.0.11
Spring Security 2.4.0
MySQL 8.0.22
現象
MySQLWorkbenchで「いらんなぁ」って思ったレコードを消去しました。
Delete row
でぽんと消しちゃったんですね。
そしたらシステムにログインできなくなりました。
別にしようとしてたログインとは関係ないレコードなんですけどね。
また元に戻せば大丈夫ですが、AutoIncrementがあるので、
- AutoIncrementを外す
- idを指定するinsertする
- AutoIncrementをつける
ってめんどくさいことをしないと戻せない。
前にもやったんですけど、解決策がわからず前に進まなかったので、とりあえずめんどくさいけど上のやり方をしました。
でもまたあとから見て不要だと思ったので削除しようってやったら、「またかよ・・・」
これからもあるかもしれないので、ちょっと調べました。
解決策
https://stackoverflow.com/questions/46612968/hibernate-unable-to-find-entity-with-id
これを参考にしました。
@NotFound(action = NotFoundAction.IGNORE)
どうやらこれを追加すれば良いみたい。
どこに?!
@ManyToOne(の下)
例
@Entity
Supplier {
// フィールド省略
}
@Entity
Wedding {
// フィールド省略
@ManyToOne // ←これが消したレコードを探しにいってるみたい・・・
private Supplier supplier;
}
変更後
@Entity
Wedding {
// フィールド省略
@ManyToOne
@NotFound(action = NotFoundAction.IGNORE) // ←これのおかげで無視してくれるみたい
private Supplier supplier;
}
原因
まだわかりません。
どうして消したはずのレコードのIDを探しにいってるの?
てかなんで覚えてるの?
どこに保存されているの?
ということがわかりません。
でもどっかに保存されているのでしょう。
Hibernateってやつですかね??
そのあたりSpringBootのことをしっかり理解していないですが、使いながら理解していきたい!!
とりあえず同じ様なエラーで前に進まない方の参考になればと思います。