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