I have this kind of entities:
Document | n .. to ..1 | DocumentType | 1 .. to .. n | PropertyType | 1 .. to
I assume you have called remove() on an of type PropertyType before. Call remove() only for the "root" entity, and remove the others with something like:
document.getDocumentType().getPropertyTypes().remove(propertyType);
And retain the DELETE_ORPHAN
You can then, after verifying you haven't manually called remove() on other entities, try calling:
document = entityManager.merge(document);
entityManager.remove(document);
so that the EntityManager reassociates the object with the session first.