0

我正在尝试加入这张桌子:

@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;
    }

到下表。表中的主键BATCHIDBATCH_DELIVERY表中对表的外键BATCHBATCH_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对象都BATCHbatchDeliveryList中。

但是,我得到的是'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 个对象。

4

1 回答 1

0

问题是它BatchDelivery没有主键,因此加入其非唯一 ID 会产生意想不到的结果。我注释了第二个字段BatchDelivery@Id创建复合键。

于 2013-10-14T21:45:07.020 回答