有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java可以解决很多问题

我有一张桌子: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");  
 }

共 (1) 个答案

  1. # 1 楼答案

    我注意到,您将cascade类型设置为DELETE_ORPHAN(删除关系两侧的孤立项)。我想你要么把它放一边,要么什么都不要。我不确定删除孤儿是否与您的场景相关

    据我所知,这段关系中只有一方真正“拥有”了这段关系。这是应该管理所有级联的那一侧,以此类推,而相反的那一侧什么也不做