很长一段时间以来,我又开始使用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之间的引用以及更多的信息。只要我添加或修改封装在TableA实例中的TableB对象,实体管理器就会按照我的预期合并对象,数据库也会相应地更新。假设我有一个TableA对象,它在tableb属性中封装了3个TableB对象。我删除了tableb中的一个元素,然后将TableA对象移动(序列化/反序列化)到实体管理器,以便执行entitymanager.merge(tableainstance),但是当我查看数据库时,所有3条TableB记录仍然存在。我没想到会找到他们,出什么问题了?我使用的是JPA 2.0,eclipselink 2.5.0。
发布于 2018-10-22 18:41:26
tableBInstance.taba=null;
entitymanager.getEntityManagerFactory().getCache().evictAll();
https://stackoverflow.com/questions/52760623
复制相似问题