Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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/JPA具有多对多关系的元素集合?_Java_Hibernate_Jpa_Many To Many - Fatal编程技术网

Java Hibernate/JPA具有多对多关系的元素集合?

Java Hibernate/JPA具有多对多关系的元素集合?,java,hibernate,jpa,many-to-many,Java,Hibernate,Jpa,Many To Many,这是一个奇怪的场景,因为我使用的是一个遗留系统,其结构我无法改变 场景是,我有一个元素表,其中包含关于元素的各种数据,其中包含重要字段“type”和“value” 对类型和值的各种组合进行分类。例如,类型2和值“绿色”的所有元素都属于类别1 我正在为遗留系统构建一个用户界面,允许用户在给定类型和值的情况下定义这些类别(显然)。我希望遗留系统在其hibernate实体中包含一组类别。类别实际上是ElementCategory类型的枚举,我的职责之一是遗留应用程序必须是定义我的模式的应用程序,因此在

这是一个奇怪的场景,因为我使用的是一个遗留系统,其结构我无法改变

场景是,我有一个元素表,其中包含关于元素的各种数据,其中包含重要字段“type”和“value”

对类型和值的各种组合进行分类。例如,类型2和值“绿色”的所有元素都属于类别1

我正在为遗留系统构建一个用户界面,允许用户在给定类型和值的情况下定义这些类别(显然)。我希望遗留系统在其hibernate实体中包含一组类别。类别实际上是ElementCategory类型的枚举,我的职责之一是遗留应用程序必须是定义我的模式的应用程序,因此在我启动它时它需要建立我的表。然后我使用那个数据库 当我创建新前端时。以下是我如何在我的元素实体中注释我的新集合:

@CollectionOfElements(fetch=FetchType.EAGER,targetElement = ElementCategory.class)
@JoinTable(name = "Element_Category",joinColumns = 
    {@JoinColumn(name = "type", referencedColumnName="type"
     @JoinColumn(name = "value", referencedColumnName="value")          
     })
@Column(name="category")
@Enumerated(EnumType.STRING)
public List<ElementCategory> getCategories() {
    return categories;
}
}

在我的元素实体类中映射如下:

    @ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "ELEMENT_ELEMENTCATOGORY", joinColumns = {
        @JoinColumn(name = "type", referencedColumnName = "type"),
        @JoinColumn(name = "value", referencedColumnName = "value") })
@Column(name = "category")
public List<ElementCategory> getCategories() {
    return categories;
}
@JoinTable(name = "Element_Category",
joinColumns = {@JoinColumn(name = "type_id") },
inverseJoinColumns = { @JoinColumn(name = "elementcategory_id") }
)
public List<ElementCategory> getCategories() {
    return categories;
}  

我不希望它是唯一的,多元素可以有这样的配置。

您可以尝试以下方式:

    @ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "ELEMENT_ELEMENTCATOGORY", joinColumns = {
        @JoinColumn(name = "type", referencedColumnName = "type"),
        @JoinColumn(name = "value", referencedColumnName = "value") })
@Column(name = "category")
public List<ElementCategory> getCategories() {
    return categories;
}
@JoinTable(name = "Element_Category",
joinColumns = {@JoinColumn(name = "type_id") },
inverseJoinColumns = { @JoinColumn(name = "elementcategory_id") }
)
public List<ElementCategory> getCategories() {
    return categories;
}  
@JoinTable(name=“Element\u Category”,
joinColumns={@JoinColumn(name=“type_id”)},
inverseJoinColumns={@JoinColumn(name=“elementcategory_id”)}
)
公共列表getCategories(){
退货类别;
}  

您可以尝试以下方法:

    @ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "ELEMENT_ELEMENTCATOGORY", joinColumns = {
        @JoinColumn(name = "type", referencedColumnName = "type"),
        @JoinColumn(name = "value", referencedColumnName = "value") })
@Column(name = "category")
public List<ElementCategory> getCategories() {
    return categories;
}
@JoinTable(name = "Element_Category",
joinColumns = {@JoinColumn(name = "type_id") },
inverseJoinColumns = { @JoinColumn(name = "elementcategory_id") }
)
public List<ElementCategory> getCategories() {
    return categories;
}  
@JoinTable(name=“Element\u Category”,
joinColumns={@JoinColumn(name=“type_id”)},
inverseJoinColumns={@JoinColumn(name=“elementcategory_id”)}
)
公共列表getCategories(){
退货类别;
}  

因此,由于begin无法找到此问题的答案,我不得不将ElementCategory设置为一个实体,并将数据存储在数据库中(这很好),我将关系设置为多个,Hibernate仍在创建元素表,并对类型和值对进行唯一约束。我不明白这如何等同于“多对多”,我可以;我不知道怎么把它关掉。请提供帮助?如果将id属性添加到ElementCategory实体中,它是否仍然会产生唯一约束?是的,它已经有了一个id属性,并用@id注释。如果决定只允许一个元素具有该特定对,我看不出这是一种多对多关系。ElementCategory是否有mappedBy属性?你可以发布ElementCategory类和包含列表的类吗?我已经编辑了原始帖子以包含此内容。因此,由于无法找到此问题的答案,我不得不将ElementCategory添加到实体中,并将数据存储在数据库中(这很好)我在中建立了与ManyToMany的关系,Hibernate仍在创建元素表,其中对类型和值对有唯一的约束。我不明白这如何等同于“多对多”,我可以;我不知道怎么把它关掉。请提供帮助?如果将id属性添加到ElementCategory实体中,它是否仍然会产生唯一约束?是的,它已经有了一个id属性,并用@id注释。如果决定只允许一个元素具有该特定对,我看不出这是一种多对多关系。ElementCategory是否有mappedBy属性?你可以发布ElementCategory类和包含列表的类吗?我已经编辑了原始帖子以包含此内容。抱歉,我不明白这一点,我的类别是根据元素中的“值”和“类型”对分配给元素的,你的答案是如何实现的?这更好地描述了我的新问题:抱歉,我不明白这一点,我的分类是根据元素中的“值”和“类型”对给元素的,您的答案是如何实现的?这更好地描述了我的新问题: