0

私は、Category各カテゴリが複数の子 (ダウンレベル カテゴリ) と複数の親 (アップレベル カテゴリ) を持つことができる場所を持っています。

私はこれを次のようにマッピングしました:

@Entity
public class Category {

@Id
public String Url;

@OneToMany
private Set<Category> childs = new HashSet<Category>();

@OneToMany
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
(
    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),
    CONSTRAINT parents_Url UNIQUE (parents_Url),
    CONSTRAINT childs_Url UNIQUE (childs_Url),

一部の行の子と親は互いに関連しておらず、1 つのタプルに含まれるべきではないため、これは絶対に間違っています。

Hibernate は 2 つのテーブルを作成category_category_1(Category_Url,childs_Url)し、from を子に関連付け、もう 1 つをcategory_category_2(Category_Url,parents_Url)from に関連付けると思います。thisthis

Hibernate がそのようにした理由と、それを正しく行う方法を教えてください。

4

1 に答える 1

1

次を使用して、リンク テーブルに個別の名前を付けることができます@JoinTable

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

@OneToMany @JoinTable(name = "category_category_2")
private Set<Category> parents = new HashSet<Category>(); 
于 2012-09-17T13:23:51.127 に答える