9

ジョインテーブルを使用して2つのテーブル間に1対多の関係をしたい。ジョインテーブルを使用して1対多数を冬眠させ、アノテーションを休止する

最後に、私はこれを実行するためにHibernate注釈を使用したい:私は結合テーブルを使用したい理由

はこれがあります。

xmlマッピングを使用してこれを行う例がいくつか見つかりましたが、注釈はありません。

私は、これはテーブルが例のために見てはいけない

CREATE TABLE `PRODUCT` (
    `PRODUCT_ID`  BIGINT  PRIMARY KEY AUTO_INCREMENT 
); 

CREATE TABLE `PARTS` (
    `PART_ID`   BIGINT  PRIMARY KEY AUTO_INCREMENT 
); 

-- USER_IMAGE_ID must be unique if we want a one-to-many relationship between PRODUCTS & PARTS tables 
CREATE TABLE `USER_DETAILS_IMAGE` (
    `PRODUCT_ID`  BIGINT, 
    `PART_ID`   BIGINT UNIQUE, 
    CONSTRAINT `FK_PRODUCT_ID` FOREIGN KEY (`PRODUCT_ID`) REFERENCES `PRODUCT`(`PRODUCT_ID`), 
    CONSTRAINT `FK_PART_ID`  FOREIGN KEY (`PART_ID`)  REFERENCES `PARTS`(`PART_ID`) 
); 

答えて

24

を作成する必要がどのようになると信じています。また

@Entity 
public class Product { 

    private String serialNumber; 
    private Set<Part> parts = new HashSet<Part>(); 

    @Id 
    public String getSerialNumber() { return serialNumber; } 
    void setSerialNumber(String sn) { serialNumber = sn; } 

    @OneToMany 
    @JoinTable(
      name="PRODUCT_PARTS", 
      joinColumns = @JoinColumn(name="PRODUCT_ID"), 
      inverseJoinColumns = @JoinColumn(name="PART_ID") 
    ) 
    public Set<Part> getParts() { return parts; } 
    void setParts(Set parts) { this.parts = parts; } 
} 


@Entity 
public class Part { 
    ... 
} 

、これは単方向の1対多関連のデフォルトであることに注意してください:official documentationをお読みください。したがって、デフォルトの表と列の名前があなたに合っている場合は、@JoinTable注釈を指定する必要はありません。

+0

JB Nizetありがとうございます。私は自分の質問を、必要なテーブルがどのように見えると思うかで更新しました。あれは正しいですか? –

+0

ドキュメントを参照してくれてありがとうございます(単一ページのバージョンは便利です)。私は正確であるが、非友好的な文書を見つけるので、私はいつも新しい技術を使い始めたときに例を探す。それは素晴らしいものでしたが、テーブル作成部分も見逃しました。http://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-one-to-many-using-annotations-1.html –

+0

SERIAL_NUMBERが注釈と一致するPRODUCT_IDであることを除いて、正しく見えます。 –

関連する問題