LoginSignup
1
1

Spring Boot + Spring Data JPAは3.1.xだと動かないかもしれない

Posted at

概要と結論の先出し

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のサポート終了直前となっており、実質的に安定版で開発できない状態となってしまっているのは非常に残念です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1