我正在尝试加入这张桌子:
@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
}
我在数据库中有 2 个BATCH_DELIVERY对象 1BATCH所以当 Hibernate 查询数据库时,我希望这两个BATCH_DELIVERY对象都BATCH在batchDeliveryList中。
但是,我得到的是's中的 2 个相同 BATCH_DELIVERY的对象。为什么 Hibernate 看到 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对象是相同的。如果我使用 Set 而不是 List,则只会BatchDelivery添加 1 个对象。