概要と結論の先出し
2023-11-24でSpring Boot2.7.xおよび3.0.xがサポート終了となりバージョンアップが必要となります。
ところがSpring Data JPAを選択しているアプリケーションの場合、3.1.xにバージョンアップすると、依存しているHibernate6.2.xにバグがあるためコードを改修しないと動かないかもしれません。
Hibernate6.2(とそれに依存するSpringのバージョン)は使用するべきではない と思われます。
いくつかの条件がわかりましたので、原因と回避策について共有します。
発生する事象
アプリケーションの起動させるとHibernateの初期化中にエラーが発生し、起動できない状態になります。下記はエラーの1例です。発生するエラーは他のエラーもあり得ます。
java.lang.ClassCastException: class org.hibernate.mapping.BasicValue cannot be cast to class org.hibernate.mapping.ToOne
原因
Hibernate6.2に含まれる比較的重大なバグが原因です。
mappedBy non-association
この他、エンティティの関連付けに関するアノテーションが機能しないケースが多発しているようです。
この問題はHibernate6.3で解決されています。
回避策
Spring Boot3.2.xのリリースを待つ
現在動いているコードを改修するのは避けたいため、3.1.xはスキップして3.2.xへ移行することをお勧めします。まもなくリリースとなるため、RCで移行準備を進めるのが良いと思われます。
ソースを改修する
お勧めできませんが、不具合を抱えているアノテーションを古いアノテーションで置き換えることで回避できるケースもあるようです。
@OneToMany(mappedBy="...")
を@JoinTable
で置き換える
先のJiraの例を回避する方法です。
先述のエラーについてのStackOverflowの質問への回答コメントに、簡単な例が提示されています。
この他にも関連付けに関するバグは複数あるようですが、それ以外のバグも多数含まれているようで、そもそも6.2を使用するべきではないと考えます。
Spring Boot3.2.xのリリースが2.7.xおよび3.0.xのサポート終了直前となっており、実質的に安定版で開発できない状態となってしまっているのは非常に残念です。