Java 使用entitymanager删除有时会失败

Java 使用entitymanager删除有时会失败,java,database,postgresql,eclipselink,persistent,Java,Database,Postgresql,Eclipselink,Persistent,我在从数据库中删除持久化对象时遇到问题。我有一些表之间存在双向关系。我做了一个测试,删除一个仍然被另一个对象引用的对象,这个测试有时会失败。我不明白为什么会这样 我的关系是这样的: @ManyToOne(cascade = CascadeType.ALL, targetEntity = Application.class, optional = false) @JoinColumn(name = ModelConstants.ID_APPLICATION, nullable = false, i

我在从数据库中删除持久化对象时遇到问题。我有一些表之间存在双向关系。我做了一个测试,删除一个仍然被另一个对象引用的对象,这个测试有时会失败。我不明白为什么会这样

我的关系是这样的:

@ManyToOne(cascade = CascadeType.ALL, targetEntity = Application.class, optional = false)
@JoinColumn(name = ModelConstants.ID_APPLICATION, nullable = false, insertable = true, updatable = true)
private Application application;

@OneToMany(cascade = CascadeType.ALL, targetEntity = Clazz.class, mappedBy = "pakage")
private List<Clazz> clazzes;
移除对象:

public static void removeObject(EntityManager entityManager,
  DatabaseElement databaseElement) {
    entityManager.getTransaction().begin();
    entityManager.remove(databaseElement);
    entityManager.getTransaction().commit();
}
例外情况:

javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: update or delete on table "pakage" violates foreign key constraint "fk_clazz_id_pakage" on table "clazz"
Detail: Key (id_pakage)=() is still referenced from table "clazz".
Error Code: 0
Call: DELETE FROM public.pakage WHERE (id_pakage = ?)
    bind => [1 parameter bound]
Query: DeleteObjectQuery(Pakage[id_pakage = , name_pakage = testPakage, Application[id_application = , name_application = testApplication]]) at 

我找到了解决方案:如果在删除对象之前调用刷新,那么一切都正常

像这样:

entityManager.refresh(databaseElement);
entityManager.remove(databaseElement);

可能一些缓存在后台工作,有时我在对象中有正确的关联,有时没有,但我不确定。

您可以发布异常和测试实现吗?您必须维护双向关系的两侧,以保持缓存与数据库同步。
entityManager.refresh(databaseElement);
entityManager.remove(databaseElement);