Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@OneToOne bidirectional mapping with @JoinColumn

Let's say I have Person

class Person{
    @Id Integer id;

    @OneToOne
    @JoinColumn(name = "person_id")
    Job myJob;
}

and Job

class Job{
    @Id Integer id;
    Integer person_id;

    @OneToOne
    @PrimaryKeyJoinColumn(name = "person_id")
    Person currentWorker;
}

I'm not able to map the Person and Job to other Entity, when fetching.
What mistake am I doing ?

like image 389
Marek Sebera Avatar asked Dec 28 '22 00:12

Marek Sebera


1 Answers

Your code should be:

@Entity
public class Person implements Serializable {

    @Id Integer id;

    @OneToOne
    @JoinColumn(name = "id")
    Job myJob;
}

@Entity
public class Job implements Serializable {

    @Id Integer id;

    @OneToOne(mappedBy = "myJob")
    Person currentWorker;
}  

(pay attemption to remove duplicated colum 'person_id' from Job)

or other approach sharing primary key:

@Entity
public class Person {
    @Id Integer id;

    @OneToOne(cascade = CascadeType.ALL)
    @PrimaryKeyJoinColumn
    Job myJob;
}            

@Entity
public class Job {
    @Id Integer id;
} 
like image 64
Guaido79 Avatar answered Dec 30 '22 09:12

Guaido79