1. ホーム
  2. ハイバーネート

問題解決:ロール例外のコレクションを遅延して初期化することに失敗しました。

2022-02-22 20:46:45

 最近、アノテーションメソッドで設定したhibernateのクラスファイルを自動的にスキャンし、エンティティクラスを積極的に設定してデータベースを生成する環境を構築する際に、いろいろと問題が発生しました。

データベース別にhibernateを設定する場合、エンティティクラスの対応する生成された.hbm.xmlファイルで1対多、多対多の関係を見ることは誰でも知っていることです。

failed to lazily initialize a collection of roles exceptionが報告された場合、多くの場合、遅延ロードの問題が原因です。

.hbm.xml ファイルに lazy="false" と記述すれば、この例外は報告されなくなります。

しかし、アノテーション・メソッドで設定されたハイバーネート・クラス・ファイルを自動的にスキャンする際に、遅延ロードを false に変更するにはどうすればよいでしょうか。

必要なのは、アノテーションに fetch=FetchType.EAGER を追加する一文だけで、たとえば次のようになります。

@ManyToMany(mappedBy = "couriers",fetch=FetchType.EAGER)
private Set<FixedArea> fixedAreas = new HashSet<FixedArea>();