1
我使用的是嵌入式ID:JPA的EclipseLink @OneToMany返回空集
@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()返回空。
我缺少什麼工作關係?
Master的配置字段是什麼樣的?某些JPA實現(如Toplink/Eclipselink)實際上緩存了計算字段的值,因此您不僅需要創建配置類,還需要將其添加到Master上的「配置」設置/列表字段。 – SplinterReality