Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Hibernate中创建双向@ManyToAny关系?_Java_Hibernate - Fatal编程技术网

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
注释

出于参考目的,my
WorkOrder
实体的定义如下(项目类似):

文件
如下:

@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 { ... }