我目前正在使用Play 2.2.1为网上商店实施评级系统。 Play使用Ebean作为ORM。在商店中,每个评级产品都有平均评级。 所以我创建了两个模型:
产品:
@Entity
public class Product extends Model {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "product_seq")
public Long id;
@OneToOne(mappedBy = "product")
public AverageRating averageRating;
...
}
AverageRating:
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "product_id"))
public class AverageRating extends Model {
@OneToOne
@JoinColumn(name="product_id")
public Product product;
...
}
一对一关系应该是双向的,而自己的模型是AverageRating。 我为AverageRating生成的表格如下所示:
create table average_rating (
product_id bigint,
average_grade float,
...
constraint uq_average_rating_1 unique (product_id));
alter table average_rating add constraint fk_average_rating_product_1 foreign key
(product_id) references product (id) on delete restrict on update restrict;
我的问题:我宁愿将foreign_id定义为average_rating中的主键,而不是使用唯一约束。或者我完全错了,应该更好地使用单独的id作为主键并在product_id上保留唯一约束?如果将删除产品,我可以定义级联,因此average_rating中的相应行也将被删除。所以我没有看到任何单独身份证明的理由。 如果使用外键作为主键的想法听起来不错,那么映射将如何?如果我使用
@OneToOne
@PrimaryKeyJoinColumn(name="product_id")
public Product product;
在AverageRating中,产品的所有属性都将加入我的average_rating表...
谢谢,
尼克