我使用的是嵌入式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()返回空。
我缺少什么才能找到合作关系?
答案 0 :(得分:3)
如果您使用其他实体maneger来查找您的主人,则可能会填充其configs集合。但是在这里,实体管理器从其缓存中返回主服务器,并且由于您没有将配置放入主服务器的配置集中,因此它不存在。
使用双向关系时,你负责维护关系的双方。 ORM仅使用拥有方(没有mappedBy
属性的方)来决定是否存在关系,但是对象图的一致性是您的责任。