このテーブルに参加しようとしています:
@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テーブルの主キーは ですID。BATCH_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オブジェクトのみが追加されます。