外键作为主键注释

时间:2018-06-21 18:02:22

标签: java hibernate jpa primary-key

有2个实体
产品(product_id(PK),product_name ..)
商店(product_id(PK,FK),product_quantity,...)

我需要@OneToOne,所以我这样做

public class Product{
  @Id
  @Column(name="PRODUCT_ID")
  @OneToOne(mappedBy="product")
  private int product_id;
  ....
}

public class Store{
  @Id
  @OneToOne(cascade = CascadeType.ALL)
  @JoinColumn(name = "PRODUCT_ID")
  private Product product;
}

编译器说@OneToOne属性上不允许使用@Column:...... shopdb.entity.Product.product_id

出什么问题了?

2 个答案:

答案 0 :(得分:1)

我刚刚将@OneToOne(mappedBy =“ product”)移至产品中新创建的字段

私人商店;

我不明白它是如何工作的; 为什么我需要使用3个字段而不是2个字段?

答案 1 :(得分:0)

您不能将用@JoinColumn定义的列标记为@Id。这仅适用于用@Column注释定义的列。

您想做什么也有些奇怪。您基本上是为两个实体都使用produc_id主键,那么为什么不只创建一个呢?

从这里我可以看到,我相信Store应该具有一个商店ID属性,该属性将用作主键。