【问题标题】:How to add a OneToOne relationship inside a child entity and map the Id of its parent如何在子实体中添加 OneToOne 关系并映射其父实体的 Id
【发布时间】:2022-10-06 23:06:37
【问题描述】:

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

@Entity
public class Profile {

  @GeneratedValue
  Long id;

  String firstname;

}

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

每个Profile 恰好有一个ProfilePicture。但是,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 实体内的变量。有人可以帮帮我吗?

    标签: java database hibernate spring-data-jpa


    【解决方案1】:

    您可以在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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多