spring-data-jpa 如何在子实体内添加一对一关系并Map其父实体的ID

0sgqnhkj  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(131)

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

@Entity
public class Profile {

  @GeneratedValue
  Long id;

  String firstname;

}

再考虑另一个实体ProfilePicture
每个Profile正好有一个ProfilePicture。但是,ProfilePicture是可选的。我想在ProfileProfilePicture之间建立一个@OneToOne关系,我想知道这两个实体中的哪一个将是拥有实体,即父实体。
我的第一个想法是:因为每个Profile都有一个ProfilePicture,而不是相反,所以Profile拥有ProfilePicture,因此是ProfilePicture的父节点。

@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实体中的变量。有人能帮我吗?

xdyibdwo

xdyibdwo1#

您可以尝试在ProfilePicture实体中使用@PrimaryKeyJoinColumn来Map外键和主键。

@Entity
public class ProfilePicture {
    @Id
    Long id;

    Byte[] picture;

    @OneToOne
    @PrimaryKeyJoinColumn(name="id", referencedColumnName="picture_id")
    Profile profile;
}

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

相关问题