2016-05-25 5 views
0

hibernateのドキュメントには、「ランタイムプロキシの生成を利用したい場合は、コンストラクタを少なくともパッケージの可視性で定義する必要があります。 私は、Hibernateがプロキシ作成(Hibernate 5.x)の代わりにバイトコードを強化することができる、Hibernateのドキュメントを読みました。どのような場合でも、この新しい方法でプロキシ作成を代用できますか? どの場合、ランタイムプロキシの生成が必要ですか?いつhibernateランタイムプロキシ生成が必要ですか?

答えて

1

デフォルトはランタイム拡張で、遅延読み込みサポートに使用されます。 @OneToOneまたは@ManyToOneアソシエーションで遅延ロードを使用する場合、遅延ロードされるクラスは保護されたコンストラクタを持つ必要があります。そうしないと、Hibernateは親エンティティをフェッチしようとすると例外をスローします。例えばだから:この例では

@Entity 
public class Parent { 

    @OneToOne(fetch=FetchType.LAZY) 
    private Child child; 

} 

Childクラスは、保護された以上、視認性のコンストラクタを持っている必要があります。

Hibernate 5.0では、バイトコード拡張を行うことができます。これは余分なコンパイルのステップなので、MavenまたはAnt(または何でも)のビルドプロセスに配置する必要があります。バイトコードの拡張では、引数なしのコンストラクタは必要ありませんが、それをインクルードしないと、アプリケーションはJPA仕様に準拠しなくなります(Hibernate以外のプロバイダに切り替える予定がある場合のみ重要です)。

関連する問題