Springboot1.5.x to 2.1.5 Upgrade【その他不具合解消編】
コンパイルエラーを解消したところまでは以下を参照のこと。
型 NotEmpty は使用すべきではありません
org.hibernate.validator.constraints.NotEmpty やNotBlankなどhibernate validatorは非推奨になってました。
use the standard NotEmpty constraint instead
とあるので、標準(javax.validation.constraints)を使えばOKです。
message.properties使ってる場合は、そちらも変更するのを忘れずに。
import org.hibernate.validator.constraints.NotEmpty;
↓
import javax.validation.constraints.NotEmpty;
他のアノテーションはjavax.validation.constraints 使ってたのに、NotEmptyだけhibernateのを使ってたんだろう・・・(前はなかったとか?)
起動時エラー
Duplicate annotation for class: interface javax.validation.constraints.Pattern: @javax.validation.constraints.Pattern
一箇所だけ『@Pattern.List』を使ってたんですが、それが駄目になったっぽいです。こんな感じ↓
@Pattern.List({
@Pattern(regexp = "[A-Z0-9]{2}", groups = 条件1, message="半角大文字英数字の2文字で入力してください"),
@Pattern(regexp = "[A-Z0-9]{4}", groups = 条件2, message="半角大文字英数字の4文字で入力してください")
})
private String hoge;
同じ内容で詰まってた人が案の定stack overflowにいたので感謝。
@Pattern.Listを取っ払って良いみたいです。
変更後↓
@Pattern(regexp = "[A-Z0-9]{2}", groups = 条件1, message="半角大文字英数字の2文字で入力してください")
@Pattern(regexp = "[A-Z0-9]{4}", groups = 条件2, message="半角大文字英数字の4文字で入力してください")
private String hoge;
MultiDataSourceの場合
MySQLとPostgres使ってるのでいろいろ大変です。が、思いの外すぐ動いたから良かった。
ここが一番綺麗に書いてくれてるかも
動画もわかりやすいかも(説明しながらだからちょっと遅いけど)
HHH000342: Could not obtain connection to query metadata : Driver org.postgresql.Driver claims to not accept jdbcUrl, postgresql://localhost:5432/xxxx
接頭詞に『jdbc:』が必要になったみたいです。MySQLも同様ですが。
url: jdbc:postgresql://localhost:5432/xxxx
ログイン時にエラー
There is no PasswordEncoder mapped for the id "null"
LDAPも使ってるんですけど、一部ユーザは固定アカウントだなので、このエラーが発生しました。spring-security-core:5.0.0.RC1から変わったらしい。生パスワード保存するなよ!って話です。
ここに書いてるやり方でいけるみたいなんですが、私の環境だとUserオブジェクト作ってなかったので、パスワード設定書いてるところに『{noop}』追加するパターンでいけました。
JpaRepositoryのgetOneを使うようになったら、findByIdのときはnullが返ってたのに、javax.persistence.EntityNotFoundExceptionが発生するようになった
コメントにちゃんと書いてました。。
/**
* Returns a reference to the entity with the given identifier. Depending on how the JPA persistence provider is
* implemented this is very likely to always return an instance and throw an
* {@link javax.persistence.EntityNotFoundException} on first access. Some of them will reject invalid identifiers
* immediately.
*
* @param id must not be {@literal null}.
* @return a reference to the entity with the given identifier.
* @see EntityManager#getReference(Class, Object) for details on when an exception is thrown.
*/
T getOne(ID id);
詳細はここのサイトに書いてるんで、読んでなんとなくふーんと思えばいいと思いますwが、実際にテーブルに対象のデータが入ってないとかを知りたいときは、getOneじゃなくてfindByIdを使うほうが良いです。
ただ、戻り値はOptionalに変わってるので、orElse使うとかよしなに。
Hoge hoge = hogeRepository.findById(period).orElse(null);
この記事が気に入ったらサポートをしてみませんか?