我正在尝试加入这张桌子:
@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 个对象匹配,但两次返回相同的对象?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
对象是相同的。如果我使用 Set 而不是 List,则只会BatchDelivery
添加 1 个对象。