2012-09-17 3 views
0

최대 절전 모드가 자동으로 작동하는지 여부를 이해하지 못합니까?@ManyToMany 매핑을 올바르게 구현하는 방법은 무엇입니까?

나는 다음과 같은 코딩 Category 법인이 :이 parents_Url은 고유하지 않아야하기 때문에 다음 표가 잘못된

CREATE TABLE 
category_parents 
(
    Category_Url VARCHAR(255) NOT NULL, 
    parents_Url VARCHAR(255) NOT NULL, 
    PRIMARY KEY (Category_Url, parents_Url), 
    CONSTRAINT FK9BB292C83275D6D7 FOREIGN KEY (Category_Url) REFERENCES category (Url) , 
    CONSTRAINT FK9BB292C8569C2962 FOREIGN KEY (parents_Url) REFERENCES category (Url), 
    CONSTRAINT parents_Url UNIQUE (parents_Url), 

를 생성 원인

@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; 

를 (여러 행을 가질 수 있어야 같은 부모).

@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; 

없이 I 코드는 내가 가진 것입니다 경우

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

어떻게 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), 

답변

0

Hibernate는 카테고리 대부분의 부모에 가지고 최대 절전 모드 알려줍니다 당신이 @OneToMany을 사용하고 있기 때문에 첫 번째 경우에 고유의 열을 만듭니다. @JoinTable을 주석 처리 한 코드에서 @OneToMany@ManyToMany으로 변경했습니다. 이것이 바로 hibernate가이 경우 고유 한 제약 조건을 생성하지 않는 이유입니다.

나는 그 범주의 자식들이 그 범주 자체를 부모라고 가정한다. 그 경우 어느 차일 또는 부모에 @ManyToManymappedBy를 사용하여 관계의 다른 측면으로 정의되어야

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

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