このテーブルに参加しようとしています:
@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 回返すのはなぜですか?BATCH
batchDeliveryList
エンティティをロードするために使用する編集 コード:
@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
オブジェクトのみが追加されます。