gpt4 book ai didi

java - 多对多消除问题

转载 作者:行者123 更新时间:2023-11-30 05:10:15 25 4
gpt4 key购买 nike

我有一个表:文档类型:

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

如您所见,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");
}

最佳答案

我注意到您在关系的两侧都将级联类型设置为 DELETE_ORPHAN。我认为您可能必须将其设置在一侧,也可能不需要设置。我不确定 DELETE_ORPHAN 是否与您的场景相关。

据我了解,只有关系的一方真正“拥有”该关系。这是应该管理所有级联等的一侧,而相反的一侧不应该执行任何操作。

关于java - 多对多消除问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3660346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com