Java 在Hibernate中创建双向@ManyToAny关系?
我有一个名为Java 在Hibernate中创建双向@ManyToAny关系?,java,hibernate,Java,Hibernate,我有一个名为AssociatedDocuments的M-N联接表,看起来有点像这样: |------------|----------|------------| | RecordType | RecordId | DocumentId | |------------|----------|------------| | ITEM | 1 | 5 | | ITEM | 2 | 2 | | WORKORDER
AssociatedDocuments
的M-N联接表,看起来有点像这样:
|------------|----------|------------|
| RecordType | RecordId | DocumentId |
|------------|----------|------------|
| ITEM | 1 | 5 |
| ITEM | 2 | 2 |
| WORKORDER | 5 | 2 |
|------------|----------|------------|
在@ManyToAny
关系的一端,我有一个多态实体集合,其中两个是项
和工作顺序
。其中每一个都可以有一个与之关联的文档
在文档
一侧,我的实体中有以下方法:
@ManyToAny(metaColumn = @Column(name = "RecordType"))
@AnyMetaDef(
idType = "integer", metaType = "string",
metaValues = {
@MetaValue(targetEntity = Item.class, value = "ITEM"),
@MetaValue(targetEntity = WorkOrder.class, value = "WORKORDER")
})
@JoinTable(name = "AssociatedDocuments",
joinColumns = {@JoinColumn(name = "DocumentId")},
inverseJoinColumns = {@JoinColumn(name = "RecordId")})
public Set<HasDocumensAndUrls> getAssociatedEntities() {
return associatedEntities;
}
这对于检索现有记录很有效,但我无法向集合中添加新的文档
实例以使其创建关系,因为存在记录类型
列。我知道@SQLInsert
,但考虑到我必须有效地猜测@SQLInsert
子句的参数顺序,这感觉像是实现解决方案的一种黑客手段
是否有一种我不知道的解决方法,或者我需要在我的@ManyToMany
关系上使用@SQLInsert
注释
出于参考目的,myWorkOrder
实体的定义如下(项目类似):
和文件
如下:
@Override
@ManyToMany
@Cascade({PERSIST, MERGE, SAVE_UPDATE})
@JoinTable(name = "AssociatedDocuments",
joinColumns = {@JoinColumn(name = "RecordId")},
inverseJoinColumns = {@JoinColumn(name = "DocumentId")})
@WhereJoinTable(clause = "RecordType = 'WORKORDER'")
public Set<Document> getDocuments() {
return this.documents;
}
@Entity
@Table(name = "Documents")
public class Document { ... }
@Mohammaddrezakhatami与
@ManyToAny
无关,[javadoc][1]说:>定义了指向不同实体类型的ToMany关联。>通过元数据>鉴别器列匹配相应的实体类型。这种映射应该只是边缘映射。因此,不必在学生和课程之间设置ManyToAny,您可以在学生和[课程或教师]之间设置ManyToAny,元数据鉴别器列将显示,对于给定的行,如果它指向课程或教师。[1]:
@Entity
@Table(name = "Documents")
public class Document { ... }