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