식별관계인 위의 다이어그램을 비식별 관계로 전환해보자.
// 부모
@Entity
public class Parent {
@Id @GeneratedValue
@Column(name = "PARENT_ID")
private Long id;
private String name;
}
// 자식
@Entity
public class Child {
@Id @GeneratedValue
@Column(name = "CHILD_ID")
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "PARENT_ID")
private Parent parent;
}
//손자
@Entity
public class GrandChild {
@Id @GeneratedValue
@Column(name = "GRANDCHILD_ID")
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "CHILD_ID")
private Child child;
}
식별 관계의 복합키가 없어지므로 식별자 클래스를 만들지 않아도 되고, 맵핑도 쉬우며 코드도 간단해졌음을 알 수 있다. 저장을 하는 save 로직에서도 훨씬 간단명료해짐을 알 수 있다.
Parent parent = new Parent();
parent.setName("PARENT_NAME#1");
em.persist(parent);
Child child = new Child();
child.setParent(parent);
child.setName("CHILD_NAME#1");
em.persist(child);
GrandChild grandChild = new GrandChild();
grandChild.setChild(child);
grandChild.setName("GRANDCHILD_NAME#1");
em.persist(grandChild);