lombokとJPAの死の再帰


これはバグです
JPAはパッケージ化された素晴らしいフレームワークだと思いますが、肥大化しているということは、複雑なクエリーが必要な場合には、JPAは向いていないと思います.パッケージが素晴らしいため、テーブルとエンティティクラスの結合が強化されます.しかし、簡単なクエリーの部分では、本当に使いやすいです.
このBugについては、単にJPA自身の問題ではなく、実体クラスでlombokフレームワークの@Dataを使用しているため、注釈を使用してコンパイル時に文法ツリーを修正し、Getter、Setterメソッドを自動的に生成し、toStringを実現し、hashCodeメソッドとフレームワークを得ることができます.実はこれ自体も大丈夫で、しかも私はずっと使いやすいと思っています.
しかし、この2つの要素が合わさったとき、問題が発生しました.エンティティークラスには複数対複数の関連関係があるため、エンティティークラスAはインスタンス化時にエンティティークラスBをインスタンス化してそのtoStringとhashCodeを呼び出す.しかし、実体Bがインスタンス化されると、対応するAがインスタンス化され、そのtoStringとhashCodeが呼び出される.はい、あなたの推測は間違いありません.これは終了条件のない再帰であり、死再帰とも呼ばれます.どんな状況になるのか、簡単に言えばStackOverflowです.
いくつかの考え
問題を知ってから、実は問題を解決するのはそんなに難しくないことに気づきます.問題が現れた原因を考えてみると、簡単な考えがありました.フレームワークのパッケージは見えない場所で、私たちの予想外の問題がある可能性があります.2.フレームワークが何をしているのかを本当に明らかにしない前に、完全に信頼しないでください(例えば、lombokを使うことができますが、何をしているのかを明らかにしなければなりません.はっきりしていないなら、GetterとSetterを使うほうがいいです.どうせ直接生成することができます).3.ibatisが作った良い点は、パッケージがあまり厳しくなく、テーブルとエンティティの間により大きなカスタマイズ空間があることです.4.なぜ一つのものが使いにくいのか知りたいので、自分で使ってみましょう.もしあなたが不快でなければ、それは使いにくいと言わないでください.もしあなたが気分が悪くなったら、自分がどうして気分が悪いのかを明らかにします.