Making @OneToOne relationship mandatory by setting optional=false:

@Entity
public class EntityA {
@Id
@GeneratedValue
private int myIdA;
@OneToOne(optional = false)
private EntityB entityB;
.............
}

@Entity
public class EntityB {
@Id
@GeneratedValue
private int myIdB;
private String stringB;
.............
}
Original Post@OneToOne unidirectional with @JoinTable:

@Entity
public class EntityA {
@Id
@GeneratedValue
private int myIdA;
private String stringA;
@OneToOne
@JoinTable(name = "MY_JOIN_TABLE",
joinColumns = {
@JoinColumn(name = "ENTITYA_FK", referencedColumnName = "myIdA")
},
inverseJoinColumns = {
@JoinColumn(name = "ENTITYB_FK", referencedColumnName = "myIdB", unique = true)
}
)
private EntityB entityB;
.............
}

@Entity
public class EntityB {
@Id
@GeneratedValue
private int myIdB;
private String stringB;
.............
}
Original Post @OneToOne bidirectional with @JoinTable:

@Entity
public class EntityA {
@Id
@GeneratedValue
private int myIdA;
private String stringA;
@OneToOne
@JoinTable(name = "MY_JOIN_TABLE",
joinColumns = {
@JoinColumn(name = "ENTITYA_FK", referencedColumnName = "myIdA")
},
inverseJoinColumns = {
@JoinColumn(name = "ENTITYB_FK", referencedColumnName = "myIdB", unique = true)
}
)
private EntityB entityB;
.............
}

@Entity
public class EntityB {
@Id
@GeneratedValue
private int myIdB;
private String stringB;
@OneToOne(mappedBy = "entityB")
private EntityA entityA;
.............
}
Original Post