Hibernate 5:没有 @Id 的 OneToOne

问题描述 投票:0回答:1

我有课

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
,但现在很难实现这一点。 有没有正确的方法来处理这种奇怪的情况?

java hibernate one-to-one
1个回答
0
投票

我相信以一对一或一对零的方式使用父级的主键是一种常用的方法。

在您的情况下,

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;
© www.soinside.com 2019 - 2024. All rights reserved.