2017-02-27 12 views
0

@Embeddedフィールドが遅延して取得される必要があるクラスを設定する方法を理解しようとすると、いくつか問題があります。私は@Basic(fetch = FetchType.LAZY)でフィールドに注釈を付けることを試みましたが、永続性APIはフィールドをSerializableを実装する基本型として扱うため、フィールドをデータベース(postgresql)のBYTEAフィールドにマッピングします。私はダービーでもそれをテストし、同じことが起こります。 @Embeddedフィールドを遅くフェッチする方法はありますか?

は、私もそれを持っているエンティティの @Embeddedフィールドに注釈を付けるのではなく、個別に @Basic(fetch = FetchType.LAZY)@Embeddableクラスのフィールドに注釈を付けることを試みました。この場合、生成されたスキーマは正しいですが、エンティティのインスタンスをロードするときに、フィールドが熱心に取得されます。

私の理解では、@Basicアノテーションは基本的なフィールド/プロパティでのみ使用されるため、最初のケースが予想されます。しかし、@Basic(fetch = FetchType.LAZY)という注釈が付けられていても、@Embeddableクラスのフィールドが熱心に取り出されるのはなぜですか?また、フェッチ戦略は@Basicと関係の注釈で指定できますが、フィールドを遅延して取得するよう指定する方法はありますか?私はEclipseLink 2.6を使用していますが、他のバージョンのEclipseLinkや他のプロバイダで動作が異なるかどうかを教えてください。

答えて

0

@埋め込みオブジェクトの仕組みのせいで、直接動作することはできませんが、動作するはずのオブジェクトの属性を設定してください。

@Basic(= FetchType.LAZYをフェッチ)

怠惰なだけコレクションや、大きなオブジェクトで使用する必要がありますことを忘れないでください、と怠惰にフェッチ・タイプを設定すると、プロバイダのための唯一の手掛かりであること、それがあることを意味するものではありません。それはいつも熱心ではなく怠惰にフェッチします。

関連する問題