6

エンティティを DTO に変換していますが、遅延ロードされ初期化されていないすべてのフィールドの DTO 値として NULL を設定したいと考えています (常にすべてのデータを転送したくないため)。

私はもう試した:

if (!(entity.getNationality() instanceof HibernateProxy))
    this.setNationalityFromEntity(entity.getNationality());

しかし、それは役に立たなかったようです。どんな提案も大歓迎です!

ありがとうございました!

4

3 に答える 3

5

エンティティでこれを行う方法は、遅延読み込みをトリガーしない方法でチェックを行うブール メソッドを使用することです。たとえば、エンティティに「associatedSomething」という関連付けられたエンティティがある場合、その関連付けられたエンティティが遅延ロードされているかどうかを確認するメソッドは次のようになります。

    public boolean isAssociatedSomethingLoaded() {
        if (associatedSomething instanceof HibernateProxy) {
            if (((HibernateProxy)associatedSomething).getHibernateLazyInitializer().isUninitialized()) {
                return false;
            }
        }
        return (getAssociatedSomething() != null);
    }

注:getAssociatedSomething()チェック中に使用しないことが重要です。これにより、関連付けられたエンティティがチェック中に遅延ロードされないことが保証されます。

于 2014-05-14T04:30:09.367 に答える