如何在子实体中添加OneToOne关系并映射其父实体的Id



考虑一个名为Profile:的Java实体

@Entity
public class Profile {
@GeneratedValue
Long id;
String firstname;
}

考虑另一个名为ProfilePicture的实体。

每个CCD_ 3恰好有一个CCD_。然而,ProfilePicture是可选的。我想在ProfileProfilePicture之间建立@OneToOne关系,我想知道这两个实体中的哪一个会是拥有实体,即父实体。

我的第一个想法是:由于每个Profile都有一个ProfilePicture,而不是相反,所以Profile拥有ProfilePicture,因此是父级。因此,我将在Profile中添加以下条目:

@Entity
public class Profile {
@GeneratedValue
Long id;
String firstname;
@OneToOne
@JoinColumn(name = "picture_id")
ProfilePicture picture;
}

现在,我遇到了@MapsId注释,我想知道是否可以更改ProfilePicture:

@Entity
public class ProfilePicture {
@GeneratedValue
Long id;
Byte[] picture;
@OneToOne
@JoinColumn(name = "profile_id")
@MapsId
Profile profile;
}

我希望ProfilePicture具有与对应的Profile相同的id。然而,我不确定Profile是否仍然拥有ProfilePicture,因为现在概要文件被声明为ProfilePicture实体内的变量。有人能帮帮我吗?

您可以在ProfilePicture实体中尝试@PrimaryKeyJoinColumn来映射外键和主键。

@Entity
public class ProfilePicture {
@Id
Long id;
Byte[] picture;
@OneToOne
@PrimaryKeyJoinColumn(name="id", referencedColumnName="picture_id")
Profile profile;
}

参考:https://stackoverflow.com/a/27306662/6784846

最新更新