1

@Embeddable私はそのようなHibernate注釈付きクラスを持っています

@Embeddable
public class DataWrapper {
    private DataWrapperType wrapperType;

    @ManyToOne
    private DataFactorX xFactor;
    @ManyToOne
    private DataFactorY yFactor;
    @ManyToOne
    private DataFactorZ zFactor;

    // Getters and Setters
}

そして、それは別のエンティティで非常に単純に使用されます

@Entity
public class DataManager {
    private DataWrapper dataWrapper;

    public DataManager() {
        this.dataWrapper = new DataWrapper();
    }
}

しかし、後でDataManagerHibernate からインスタンスを取得すると、dataWrapperフィールドは null に戻ります。

説明はありますか?

4

1 に答える 1

2

私は今答えを持っていますが、Hibernate のアマチュアである私には明らかではなかったので、先に進んで投稿しました。ChssPly76 によるこの回答に基づいて、nullすべてのフィールドがnull. この動作は公式であり、ここで見つけた文書化されています:

コンポーネントの null 値のセマンティクスはアドホックです。含まれているオブジェクトをリロードするとき、Hibernate は、すべてのコンポーネント列が null の場合、コンポーネント全体が null であると想定します。これはほとんどの目的に適しています。

これは、フィールドを設定した参照を操作している間は設定されたままですが、Hibernate にクエリを実行してこのオブジェクトを再度取得すると、そのコンポーネントがすべて null の場合、そのフィールドは null になることを意味します。

他の誰かが、他NullPointerExceptionの方法で動作する Java コードで s を追跡しないようにするのに役立つことを願っています。

于 2012-10-12T15:36:12.810 に答える