我有一些JPA缓存问题,方案如下:
我有两个A和B类,关系是ManyToMany,但后来我将ManyToMany拆分为两个OneToMany关系和新类
public class A{
@OneToMany(cascade = CascadeType.ALL, mappedBy="a")
private List<AB> ab;
}
public class B{
@OneToMany(cascade = CascadeType.ALL, mappedBy="b")
private List<AB> ab;
}
public class AB{
@ManyToOne
@JoinColumn(name = "A_id", referencedColumnName="id")
private A a;
@ManyToOne
@JoinColumn(name = "B_id", referencedColumnName="id")
private B b;
...other fields
}
我的问题是,当我删除A:我希望A和AB被删除,而B未触及db(如果我删除B则相同)。
这样可行,并且DB状态很好但是JPA和缓存存在问题。 当我删除A(和带有级联的AB)时,JPA缓存仍然在B实例中保存对它们的引用 - 这是不可取的。因此,当我查询B时,我将找到已删除的嵌套AB实例。
我试图在AB ManyToMany字段上添加级联,但它没有帮助。 如果我清除缓存:entityManager.getEntityManagerFactory()。getCache()。evictAll();一切正常,但这不是一个好的解决方案。
我将EntityManager与EJB3一起使用,并从javax.persistence级联。
我很感激答案。
答案 0 :(得分:0)
您的问题与eclipselink 2 OneToMany with one association table how to delete from one side 类似。因此,在删除A(因此删除AB)之前,请删除B到AB的所有引用。