Home > Net >  Is there a way to create an object with foreign key being null at first and then to set it later in
Is there a way to create an object with foreign key being null at first and then to set it later in

Time:06-06

I have a one to one relation between two classes. I want to create phase items without having to insert candidate Id with it, because I get candidates afterwards so they basically don't exist.

Right now I'm getting the error:

could not execute statement; SQL [n/a]; constraint [null];

because i'm not sending candidateId with it.

This is the first class :

public class PhaseItems {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "phaseI_id")
private long id;

private String PhaseItem;

@ManyToMany(fetch = FetchType.LAZY,
        mappedBy = "items")
@JsonIgnore
private List<PhaseTemplate> template = new ArrayList<>();

 @OneToOne(fetch = FetchType.LAZY, optional = true)
 @JoinColumn(name = "candidate_id", nullable = true)
 private Candidate candidate;
 
 public PhaseItems() {
    super();
 }  



public PhaseItems(long id, String phaseItem) {
    super();
    this.id = id;
    PhaseItem = phaseItem;
}



public long getId() {
    return id;
}


public void setId(long id) {
    this.id = id;
}


public String getPhaseItem() {
    return PhaseItem;
}


public void setPhaseItem(String phaseItem) {
    PhaseItem = phaseItem;
}







public List<PhaseTemplate> getTemplate() {
    return template;
}



public void setTemplate(List<PhaseTemplate> template) {
    this.template = template;
}



public Candidate getCandidate() {
    return candidate;
}



public void setCandidate(Candidate candidate) {
    this.candidate = candidate;
}



@Override
public String toString() {
    return "PhaseItems [id="   id   ", PhaseItem="   PhaseItem   ", template="   template   "]";
}

This is the second class:

@Entity
@Table(name= "candidats")
public class Candidate {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "candidate_id")
    private long id;
    
    private String fullname;
    
    private String username;
    
    @Column(nullable = false, unique = true, length = 45)
    private String email;
    
    private String adress;
    
    private String phoneNumber;
    
    private String password;
    
    @Column(name = "status")
    private String status;
    
    
      @OneToOne(fetch = FetchType.LAZY,
                cascade =  CascadeType.ALL,
                mappedBy = "candidate")
      private PhaseItems phases;
    
    public Candidate(){
        
    }

    public Candidate(String fullname,String username,String email, String adress, String phoneNumber, String password,
            List<JobApplication> appliedJobs) {
        super();
        this.fullname = fullname;
        this.username = username;
        this.email = email;
        this.adress = adress;
        this.phoneNumber = phoneNumber;
        this.password = password;
        this.appliedJobs = appliedJobs;
    }
    
    
    

    public Candidate(String fullname,String username, String email, String adress, String phoneNumber, String password) {
        super();
        this.fullname = fullname;
        this.username = username;
        this.email = email;
        this.adress = adress;
        this.phoneNumber = phoneNumber;
        this.password = password;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

     

    
    public String getFullname() {
        return fullname;
    }

    public void setFullname(String fullname) {
        this.fullname = fullname;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAdress() {
        return adress;
    }

    public void setAdress(String adress) {
        this.adress = adress;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public List<JobApplication> getAppliedJobs() {
        return appliedJobs;
    }

    public void setAppliedJobs(List<JobApplication> appliedJobs) {
        this.appliedJobs = appliedJobs;
    }
    
    public String getStatus() {
        return status;
    }

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

CodePudding user response:

Is your column « candidate_id » from table phase_items nullable in your schema ?

CodePudding user response:

Set column candidate_id as nullable in your database. Java attribute nullable = true of @JoinColumn annotation is ignored.

  • Related