私は2つのテーブルを持っています:
CREATE TABLE product
(
id serial NOT NULL,
-- some other columns
CONSTRAINT product_pkey PRIMARY KEY (id )
);
CREATE TABLE product_image
(
product_id bigint NOT NULL,
order integer NOT NULL,
width integer NOT NULL,
-- some other columns
CONSTRAINT product_image_pk PRIMARY KEY (product_id , order ),
CONSTRAINT product_image_product_fk FOREIGN KEY (product_id)
REFERENCES product (id)
);
私はこのようにマッピングしたい:
public class Product {
...
List<Image> images;
...
}
public class Image {
...
int width;
...
}
基本的に、Product クラスには、注文と製品 ID (可能な場合) を除くイメージ テーブルのすべてのフィールドを含む Image オブジェクトのリストが必要です。リストは順序フィールドに従ってソートする必要があります。
理想的には、注文を処理する必要はまったくありません。製品のリストからの順序を休止状態で使用したいだけです。画像クラスに商品フィールドと注文フィールドは必要ですか?
私の注釈がどのように機能するか、またはこの種のものをマッピングするための最良の方法について、誰かが私を正しい方向に向けることができますか? データベースでは何もできませんが、Java モデルについてはオープンです。
ありがとう!
編集:
私はこれを試しました:
@Entity
@Table(name = "product_image")
public class Image implements Comparable<Image>{
@Id
@Column(name = "order")
private Integer order;
@Id
@ManyToOne
@JoinColumn(name="product_id")
private Product product;
}
@Entity
@Table(name = "product")
public class Product {
@OneToMany(mappedBy="product", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@Sort(type = SortType.COMPARATOR, comparator = Image.class)
@OrderColumn(name = "order")
private List<Image> images;
}
データの読み取りには機能しますが、このコードは失敗します:
List<Image> images = new ArrayList<Image>();
Image i = new Image();
i.setProduct(product);
images.add(i);
product.setImages(images);
session.save(product);
注文がまだ null であるためです。