How to make an entity as a primary key for the other entity

Viewed 57

I have two entities Institute and the InstituteVerificationStatus. I want to make the Institute as a Primary key for the InstituteVerificationStatus Entity. I add @Id annotation, but it is giving me an error.

The InstituteVerficationStatus Class doesn't have ID class. Institute:

@Entity
@Table(name="Institute")
public class institute implements Serializable {


  /**
   *
   */
  private static final long serialVersionUID = 617543973484435246L;


  @Id
  @Column(name = "id")
  private String id;


  @Column(name = "vendorId")
  private String vendorId;


  @Column(name = "name")
  private String name;

  @Column(name = "profilePicPath")
  private String profilePicPath;


  @Column(name = "contactNumber")
  private String contactNumber;

  @Column(name = "email")
  private String email;

  @Column(name = "gstNo")
  private String gstNo;

  @Column(name = "address")
  private String address;

  @OneToOne(mappedBy = "institute")
  private instituteVerificationStatus instituteVerificationStatus;

}

InstituteVerificationStatus:

@Entity
@Table(name="InstituteVerificationStatus")
public class instituteVerificationStatus implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = -1603576445855941895L;

    @Id
    @JoinColumn(name ="instituteId")
    @OneToOne
    private institute institute;


    @Column(name="verifiedByUserId")
    private String verifiedByUserId;

    @Column(name="status")
    private Character status;

    @Column(name="verificationTs")
    private Timestamp verificationTs;


    public instituteVerificationStatus(institute institute) {
        this.institute = institute;
        this.status='N';
    }

    public institute getInstitute() {
        return institute;
    }

    public void setInstitute(institute institute) {
        this.institute = institute;
    }

    public String getVerifiedByUserId() {
        return verifiedByUserId;
    }

    public void setVerifiedByUserId(String verifiedByUserId) {
        this.verifiedByUserId = verifiedByUserId;
    }

    public Character getStatus() {
        return status;
    }

    public void setStatus(Character status) {
        this.status = status;
    }

    public Timestamp getVerificationTs() {
        return verificationTs;
    }

    public void setVerificationTs(Timestamp verificationTs) {
        this.verificationTs = verificationTs;
    }

}
1 Answers

Try using the MapsId like below and add id which has the same data structure like the first entity's id, it will work fine.

@Entity
@Table(name="InstituteVerificationStatus")
public class instituteVerificationStatus implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = -1603576445855941895L;


    @Id
    @Column(name ="instituteId")
    private String id;

    @JoinColumn(name ="instituteId")
    @OneToOne
    @MapsId
    private institute institute;


    @Column(name="verifiedByUserId")
    private String verifiedByUserId;

    @Column(name="status")
    private Character status;

    @Column(name="verificationTs")
    private Timestamp verificationTs;


    public instituteVerificationStatus(institute institute) {
        this.institute = institute;
        this.status='N';
    }

    public institute getInstitute() {
        return institute;
    }

    public void setInstitute(institute institute) {
        this.institute = institute;
    }

    public String getVerifiedByUserId() {
        return verifiedByUserId;
    }

    public void setVerifiedByUserId(String verifiedByUserId) {
        this.verifiedByUserId = verifiedByUserId;
    }

    public Character getStatus() {
        return status;
    }

    public void setStatus(Character status) {
        this.status = status;
    }

    public Timestamp getVerificationTs() {
        return verificationTs;
    }

    public void setVerificationTs(Timestamp verificationTs) {
        this.verificationTs = verificationTs;
    }

}
Related