У меня есть таблица: DocumentType:
@ManyToMany(cascade = {CascadeType.REFRESH, CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
@JoinTable(
name = "document_type_property_type",
joinColumns = @JoinColumn(name = "document_type"),
inverseJoinColumns = @JoinColumn(name = "property_type")
)
@Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
@ForeignKey(name = "FK_DOCUMENT_TYPE_PROPERTY_TYPE__DOCUMENT_TYPE", inverseName = "FK_DOCUMENT_TYPE_PROPERTY_TYPE__PROPERTY_TYPE")
@Sort(type = SortType.NATURAL)
private SortedSet<PropertyType> propertyTypes = new TreeSet<PropertyType>();
и PropertyType:
@ManyToMany(cascade = {CascadeType.REFRESH, CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
@JoinTable(
name = "document_type_property_type",
joinColumns = @JoinColumn(name = "property_type"),
inverseJoinColumns = @JoinColumn(name = "document_type")
)
@Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
@Sort(type = SortType.NATURAL)
protected SortedSet<DocumentType> documentTypes = new TreeSet<DocumentType>();
Как вы видите, таблица моста для ManyToMany выглядит следующим образом: document_type_property_type.
Я не понимаю, почему, если я удаляю тип свойства из типа документа, он не только удаляет его из таблицы моста (как я хочу / ожидаю), но также удаляет его из самого типа свойства (которого я хочу избежать!).
Можете ли вы дать мне обходной путь?
Спасибо.
Редактировать : код для удаления типа свойства - отношение типа документа:
public void removePropertyType(final PropertyType propertyType) {
super.performDAudit(propertyType);
final DocumentType currentInstance = getInstance();
currentInstance.getPropertyTypes().remove(propertyType);
getEntityManager().persist(propertyType);
FacesMessages.instance().add(StatusMessage.Severity.INFO, "Property Type was succesfully removed from this document type");
}