0

TGIF の皆さん、私は自分のプロジェクトの 1 つにまだ行き詰まっています。と の 2 つのインターフェイスがIMasterOrderありIOrderます。のIMasterOrderコレクションを持つことができますIOrderMasterOrderそのため、複数のエンティティ クラスとOrder、インターフェイスを実装するエンティティ クラスが存在する可能性があります。

コーディングを簡素化するために、どこでもオブジェクトを作成IMasterOrderIOrderますが、具象型を指定する必要がある場合は、IMasterOrderオブジェクトをクラス型にキャストするだけです。

問題は、これにより、マスタークラスがその注文について常に null を返すようになることです。JPAが一般的にポリモーフィズムとどのように連携するかについて非常に興味がありますか?

アップデート

早々に混乱してしまい申し訳ありません。実際、質問ははるかに簡単です

実際にエンティティクラスはこのようなものです

public class MasterOrder implements IMasterOrder {

// Relationships

@OneToOne(mappedBy = "masterOrder")
private OrderCustomFields customFields;

@OneToMany(mappedBy = "masterOrder")
private List<OrderLog> logs;

@OneToMany(mappedBy = "masterOrder")
private Collection<Order> orders;

// Fields...

そして、Master order エンティティ インスタンスを取得するための finder メソッドは次のようになります。

 public static MasterOrder findMasterOrder(String id) {
    if (id == null || id.length() == 0) return null;
    return entityManager().find(MasterOrder.class, id);
}

ただし、このファインダ メソッドの MasterOrder インスタンスは、すべて null の customFields とログと注文を返します。では、これを修正する方法は?前もって感謝します。

4

2 に答える 2

1

ログと注文にアクセスするとき、マスターは引き続きアクティブな永続化コンテキストの一部ですか? すなわち: マスター エンティティを検出した EntityManager は閉じられているか、クリアされていますか? はいの場合、すべてが期待どおりに機能しています。

くすくす笑いの場合は、ログと注文のフェッチ属性を EAGER に変更してみてください...これは、他に何か悪いことが起こっているかどうかを特定するのに役立ちます。

@OneToMany(mappedBy = "masterOrder", fetch = FetchType.LAZY)
private List<OrderLog> logs;

@OneToMany(mappedBy = "masterOrder", fetch = FetchType.LAZY)
private Collection<Order> orders;
于 2012-06-24T14:00:50.800 に答える
0

マッピングに問題があるように聞こえます。空のコレクションは NULL であるべきではないと思います。空のリスト (初期化されている場合)、または読み取り時に初期化されるプロキシのいずれかである必要があります。トランザクションを離れてコレクションから読み取ろうとすると、遅延初期化例外をスローする必要があります。いずれの場合も、関連するすべてのクラスを質問に含めて、詳細情報を提供する必要があります。

于 2012-06-24T14:17:26.563 に答える