我有课
Products
,其中有:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "products_seq")
@SequenceGenerator(name = "products_seq", sequenceName = "products_seq", allocationSize = 1)
@Column(name = "PRODUCT_ID")
protected Integer productId;
它还有:
private Attributes attributes;
应该加入 @OneToOne
到 Attributes
类;
问题是
Attributes
不包含它自己的id
。该表格有两列 ATTRIBUTE_ID
和 DATE
。不幸的是 ATTRIBUTE_ID
不是生成的 id,而是与 product_id
类中的 Products
相同。
我尝试在产品类中添加:
@OneToOne(mappedBy = "product", cascade = CascadeType.PERSIST)
private Attributes attributes;
在属性类中:
@Id
@GeneratedValue(generator = "foreign")
@GenericGenerator(name = "foreign", strategy = "foreign", parameters = @Parameter(name = "property", value = "product"))
@Column(name = "ATTRIBUTE_ID")
private Integer attributeId;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "attribute_id")
private Product product;
但我认为这不是正确的解决方案。 我相信
ATTRIBUTES
桌子也应该有id
,但现在很难实现这一点。
有没有正确的方法来处理这种奇怪的情况?
我相信以一对一或一对零的方式使用父级的主键是一种常用的方法。
在您的情况下,
Attributes
可能看起来像这样:
@Entity
public class Attributes {
@Id
@Column(name = "ATTRIBUTE_ID")
private Long id;
@OneToOne
@MapsId // establish shared primary key relationship
@JoinColumn(name = "ATTRIBUTE_ID")
private Product product;