我正在尝试加入此表:
@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 BATCH_DELIVERY
个BATCH
个对象,所以当Hibernate查询数据库时,我希望BATCH_DELIVERY
个对象都在BATCH
' s batchDeliveryList
。
但是,我得到的是BATCH_DELIVERY
BATCH
中的2个相同的 batchDeliveryList
个对象。为什么Hibernate看到2个对象匹配,但返回相同的两个?
修改 我用来加载实体的代码:
@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
对象所持有的List时,我看到BatchDelivery
个对象是相同的。如果我使用Set而不是List,那么只会添加1个BatchDelivery
对象。
答案 0 :(得分:0)
问题是BatchDelivery
没有主键,因此加入其非唯一ID会产生意外结果。我将BatchDelivery
中的第二个字段注释为@Id
以创建复合键。