Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 如何正确实现@ManyToMany映射?_Java_Hibernate_Orm_Many To Many_Relational Database - Fatal编程技术网

Java 如何正确实现@ManyToMany映射?

Java 如何正确实现@ManyToMany映射?,java,hibernate,orm,many-to-many,relational-database,Java,Hibernate,Orm,Many To Many,Relational Database,我不明白,休眠是否应该自动工作 我有类别实体,其编码如下: @Entity public class Category { @Id public String Url; @OneToMany @JoinTable(name = "category_childs") private Set<Category> childs = new HashSet<Category>(); @OneToMany @JoinTable(name = "category_parents

我不明白,休眠是否应该自动工作

我有
类别
实体,其编码如下:

@Entity
public class Category {

@Id
public String Url;

@OneToMany
@JoinTable(name = "category_childs")
private Set<Category> childs = new HashSet<Category>();

@OneToMany
@JoinTable(name = "category_parents")
private Set<Category> parents = new HashSet<Category>();

@OneToMany(cascade=CascadeType.ALL)
private Set<Person> persons = new HashSet<Person>();

public String Title;

public boolean Done;
这是不正确的,因为
父项\u Url
不应是唯一的(应允许多行具有相同的父项)

如果我的代码没有@JoinTable规范

@Entity
public class Category {

@Id
public String Url;

@ManyToMany(cascade=CascadeType.ALL)
//@JoinTable(name = "category_childs")
private Set<Category> childs = new HashSet<Category>();

@ManyToMany(cascade=CascadeType.ALL)
//@JoinTable(name = "category_parents")
private Set<Category> parents = new HashSet<Category>();

@OneToMany(cascade=CascadeType.ALL)
private Set<Person> persons = new HashSet<Person>();

public String Title;

public boolean Done;
如何使Hibernate创建具有两个字段的关系表

具体如下:

CREATE TABLE
category_category
(
    parents_Url VARCHAR(255) NOT NULL,
    childs_Url VARCHAR(255) NOT NULL,
    PRIMARY KEY (parents_Url, childs_Url),
    CONSTRAINT FK8635931F569C2962 FOREIGN KEY (parents_Url) REFERENCES category (Url) ,
    CONSTRAINT FK8635931F6ADF3430 FOREIGN KEY (childs_Url) REFERENCES category (Url),

Hibernate在第一种情况下创建一个唯一的列,因为您使用的是
@OneToMany
,它告诉Hibernate一个类别最多有一个父类别。在注释掉
@JoinTable
的代码中,您还将
@OneToMany
更改为
@ManyToMany
。这就是hibernate在本例中不创建唯一约束的原因

我假设类别的child将类别本身作为父级。在这种情况下,必须使用
@manytomy
中的
mappedBy
将孩子或父母定义为关系的另一方:

@ManyToMany
@JoinTable(name = "category_childs")
private Set<Category> childs = new HashSet<Category>();

@ManyToMany(mappedBy="childs")
private Set<Category> parents = new HashSet<Category>();
@manytomy
@JoinTable(name=“category\u childs”)
private Set childs=new HashSet();
@许多(mappedBy=“childs”)
private Set parents=new HashSet();
CREATE TABLE
category_category
(
    parents_Url VARCHAR(255) NOT NULL,
    childs_Url VARCHAR(255) NOT NULL,
    PRIMARY KEY (parents_Url, childs_Url),
    CONSTRAINT FK8635931F569C2962 FOREIGN KEY (parents_Url) REFERENCES category (Url) ,
    CONSTRAINT FK8635931F6ADF3430 FOREIGN KEY (childs_Url) REFERENCES category (Url),
@ManyToMany
@JoinTable(name = "category_childs")
private Set<Category> childs = new HashSet<Category>();

@ManyToMany(mappedBy="childs")
private Set<Category> parents = new HashSet<Category>();