2010-09-07 104 views
1

我有一個表: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>(); 

和屬性類型:

@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>(); 

正如你看到的多對多表橋是: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"); 
} 

回答

2

我注意到你有級聯類型設置爲DELETE_ORPHAN在關係的兩側。我想你可能要麼將它放在一邊,要麼不放。我不確定DELETE_ORPHAN在你的場景中是否相關。

據我所知,只有一方的關係實際上「擁有」了關係。這是應該管理所有級聯的一面,反面應該什麼也不做。

+0

當然,DELETE_ORPHAN引起了問題....謝謝! – 2010-09-07 16:20:53