relationMapping

단방향

  • 객체간 HasA 관계를 같는 경우 근데 이게 한쪽만 갖는 경우 단방향 관계다.

양방향

  • 테이블은 join으로 서로를 가져올 수 있으므로 양방향이다.
  • 물론 객체 매핑에도 양방향이 가능하다.
  • @OneToOne, @OneToMany, @ManyToOne, @ManyToMany의 경우 뒤쪽이 현재 객체가 가지는 형태다.

주인

  • join key를 갖는 쪽이 주인이 된다.(@JoinColumn)
  • 객체에서 주인이 아닌 경우 mappedBy로 참조를 하면 된다.

복합 기본 키

  • JPA는 복합 키를 사용하려면 별도의 식별자 클래스가 필요하다.
  • @IdClass
    1. @IdClass를 사용해서 식별자 클래스를 지정하면 된다.
    2. 복합키는 별도의 식별자 클래스로 만들어야 한다.
    3. serializable을 구현해야 한다.
    4. equals, hashCode를 구현해야 한다.
    5. 기본 생성자가 있어야 한다.
    6. 식별자 클래스는 public이어야 한다. ```java public class ParentId implements Serializeable { private String id1; private String id2;

    @Overide public boolean equals() {} @Overide public boolean hashCode() {} } //마치 복합키 Constraint 선언같다.

@Entity @IdClass(ParentId.class) public class Parent { @Id @Column private String id1;

@Id
@Column
private String id1; } ``` - `@EmbeddedId`   1. 조금 더 객체지향적인 방법   2. 식별자 클래스에 기본 키를 직접 매핑하는 방식 ```java @Embeddable public class ParentId implements Serializeable {
@Column
private String id1;
@Column
private String id2;

@Overide
public boolean equals() {}
@Overide
public boolean hashCode() {} } //마치 복합키 Constraint 선언같다.

@Entity @IdClass(ParentId.class) public class Parent {

@EmbeddedId
private ParentId parentId; } ```