OneToOne - samerook/samerook_test GitHub Wiki

[Get Started](Get Started)

Entity A 에 하나의 Entity B를 갖고,

Entity B 에 하나의 Entity A를 갖고,

Entity A는 이 관계의 Owner로 설정됨.

양쪽에서 OneToOne Annotation을 사용할 경우 한 Entity가 Owner가 되어야 함.


기본값)

Entity A는 A라는 이름의 Table로 생성

Entity B는 B라는 이름의 Table로 생성

Table A는 Table B를 가리키는 foreign key를 갖고 있어야 함.

Foreign key의 column명은 다음을 따른다.

[Entity A relationship property name]_[Entity B primary key]

Foreign key 의 Type은 Table B의 Primary Key와 같으며 unique key로 지정한다.


@Entity
public class Employee {
private Cubicle assignedCubicle;
@OneToOne
public Cubicle getAssignedCubicle() {
return assignedCubicle;
}
public void setAssignedCubicle(Cubicle cubicle) {
this.assignedCubicle = cubicle;
}
...
}

@Entity
public class Cubicle {
@Id
private int cubicleId;
private Employee residentEmployee;
@OneToOne(mappedBy="assignedCubicle")
public Employee getResidentEmployee() {
return residentEmployee;
}
public void setResidentEmployee(Employee employee) {
this.residentEmployee = employee;
}
...
}

위 와 같은 Entity 설정에 따른 OneToOne 결과
  • Employee , Cubicle 는 서로 하나의 Instance를 갖는 One To One Relation
  • Employee Entity가 이 관계의 Owner로 설정, [ (mappedBy=” “)에 의해 Owner 결정]
  • Employee Table , Cubicle Table 생성
  • Employee Table에 설정된 Foreign key 이름은 ASSIGNEDCUBICLE_CUBICLEID (PRIMARY_KEY_OF_CUBICLE)
  • Employee Table에 설정된 Foreign key Type은 int (PRIMARY_KEY_OF_CUBICLE와 동일) Unique Key 로 설정

So, CREATE TABLE SQL Query - CREATE TABLE CUBICLE( CUBICLEID INTEGER PRIMARY KEY, … ); - CREATE EMPLOYEE ( … , ASSIGNEDCUBICLE_CUBICLEID INTEGER, FOREIGN KEY(ASSIGNEDCUBICLE_CUBICLEID) REFERENCES CUBICLE (CUBICLEID) ); SELECT SQL Query - SELECT * FROM EMPLOYEE, CUBICLE
WHERE EMPLOYEE. ASSIGNEDCUBICLE_CUBICLEID = CUBICLE. CUBICLEID;
위 쿼리를 사용해 두 Table을 모두 가져온 뒤 Entity에 Mapping

**[OneToOne 주의사항](OneToOne 주의사항)**
⚠️ **GitHub.com Fallback** ⚠️