很长一段时间以来,我回到JPA
上,我忘了最多。我有这种情况:
@Entity
@Table(name = "tablea")
public class TableA implements Serializable {
...
@OneToMany(mappedBy = "taba", CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "id")
List<TableB> tableb;
}
@Entity
@Table(name = "tableb")
public class TableB implements Serializable {
...
@ManyToOne
@JoinColumn(name = "id_tablea")
TableA taba;
@OneToOne
@JoinColumn(name = "id_tablec")
TableC tabc;
}
@Entity
@Table(name = "tablec")
public class TableC implements Serializable {
...
}
如您所见,TableB
是一个关联表,我使用它来保持TableA
和TableC
之间的引用以及更多信息。就我添加或修改封装在TableB
实例中的TableA
对象而言,实体管理器按我的期望合并了该对象,数据库也随之更新。假设我有一个TableA
对象,它在其TableB
属性中封装了3个tableb
对象。我删除了tableb
中的一个元素,然后将TableA
对象移动(序列化/反序列化)到实体管理器以执行entitymanager.merge(tableainstance)
,但是当我查看数据库时, 3 TableB
条记录仍然存在。我没想到会找到它们,怎么了?我正在使用JPA 2.0
,eclipselink 2.5.0
。
答案 0 :(得分:0)
由于TableB在OneToMany关系的拥有侧,因此请从TableB中删除对TableA的引用。
tableBInstance.taba=null;
合并后清除缓存。
entitymanager.getEntityManagerFactory().getCache().evictAll();