JPA EclipseLink @OneToMany返回空集

时间:2011-08-05 07:11:04

标签: java jpa one-to-many

我使用的是嵌入式ID:

@Embeddable
public class EntityId {
    private long id;
}

我有以下表格:

@Entity
public class Master {
    @EmbeddedId private EntityId id;

    @OneToMany(mappedBy = "master")
    Set<Config> configs;
}

@Entity
public class SlaveLeft {
    private @EmbeddedId EntityId id;
}

@Entity
public class SlaveRight {
    private @EmbeddedId EntityId id;
}

@Entity
public class Config {

    @EmbeddedId private EntityId id;

    @ManyToOne
    @JoinColumn(name = "MASTER_ID", referencedColumnName = "id")
    private Master master;
    @ManyToOne
    @JoinColumn(name = "LEFT_ID", referencedColumnName = "id")
    private SlaveLeft slaveLeft;
    @ManyToOne
    @JoinColumn(name = "RIGHT_ID", referencedColumnName = "id")
    private SlaveRight slaveRight;
}

然后我填充数据库:

    final EntityManager em = injector.getInstance(EntityManager.class);
    em.getTransaction().begin();
    Master master = new Master(EntityId.next());
    SlaveLeft slaveLeft = new SlaveLeft(EntityId.next());
    SlaveRight slaveRight = new SlaveRight(EntityId.next());
    Config config = new Config(EntityId.next(), master, slaveLeft, slaveRight);

    em.persist(master);
    em.persist(slaveLeft);
    em.persist(slaveRight);
    em.persist(config);
    em.getTransaction().commit();

    final Master master1 = em.find(Master.class, master.getId());
    System.out.println(master1.getConfigs());

问题是master1.getConfigs()返回空。

我缺少什么才能找到合作关系?

1 个答案:

答案 0 :(得分:3)

如果您使用其他实体maneger来查找您的主人,则可能会填充其configs集合。但是在这里,实体管理器从其缓存中返回主服务器,并且由于您没有将配置放入主服务器的配置集中,因此它不存在。

使用双向关系时,负责维护关系的双方。 ORM仅使用拥有方(没有mappedBy属性的方)来决定是否存在关系,但是对象图的一致性是您的责任。