0

このテーブルに参加しようとしています:

@Entity
@Table(name = "BATCH")
public class Batch {

    @Id
    private int id;

    @OneToMany
    @JoinColumn(name="BATCH_ID")
    private List<BatchDelivery> batchDeliveryList;

    public List<BatchDelivery> getBatchDeliveryList() {
        return batchDeliveryList;
    }

    public void setBatchDeliveryList(
        List<BatchDelivery> batchDeliveryList) {
        this.batchDeliveryList = batchDeliveryList;
    }

次の表に。BATCHテーブルの主キーは ですIDBATCH_DELIVERYテーブルへのBATCHテーブルの外部キーは ですBATCH_ID

@Entity
@Table(name="BATCH_DELIVERY")
public class BatchDelivery {

    @Id
    @Column(name = "BATCH_ID")
    private int batchId;

    // Other fields, get/set here

}

データベースに 1 に対して2 つBATCH_DELIVERYのオブジェクトがBATCHあるため、Hibernate がデータベースにクエリを実行すると、両方のBATCH_DELIVERYオブジェクトが にあると予想されBATCHますbatchDeliveryList

しかし、私が得るのは の 2つの同一BATCH_DELIVERYオブジェクトです。Hibernate が 2 つのオブジェクトの一致を認識しているのに、同じオブジェクトを 2 回返すのはなぜですか?BATCHbatchDeliveryList

エンティティをロードするために使用する編集 コード:

@Test
public void thatCourtCallsBatchDeliveryJoinWorks() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Batch batch = null;
    int id = 555;

    try {
        batch = (Batch)session.get(Batch.class, id);            
        Hibernate.initialize(Batch.getBatchDeliveryList());
    } catch (Exception e) {
        logger.error("thatBatchDeliveryJoinWorks Exception", e);
    } finally {
        session.close();
    }
}

注: このテストにはまだアサーションがないことは承知しています。デバッグして、オブジェクトが保持するリストを調べると、オブジェクトが同一Batchであることがわかります。BatchDeliveryリストの代わりにセットを使用すると、1 つのBatchDeliveryオブジェクトのみが追加されます。

4

1 に答える 1

0

問題はBatchDelivery、主キーがなかったため、一意でない ID で結合すると予期しない結果が生じていたことです。複合キーを作成するためBatchDeliveryに、2 番目のフィールドに注釈を付けました。@Id

于 2013-10-14T21:45:07.020 に答える