我有两张桌子:
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 类有一个 Image 对象列表,其中包含图像表中除订单和产品 ID 之外的所有字段(如果可能的话)。该列表应根据 order 字段进行排序。
理想情况下,我根本不想处理订单。我只想让休眠使用产品列表中的顺序。我需要图像类中的产品和订单字段吗?
谁能指出我的注释应该如何或最好的方法是映射这类事情的正确方向?我真的不能在数据库中做任何事情,但我对 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);
因为订单仍然为空。