relationMapping
단방향
- 객체간 HasA 관계를 같는 경우 근데 이게 한쪽만 갖는 경우 단방향 관계다.
양방향
- 테이블은 join으로 서로를 가져올 수 있으므로 양방향이다.
- 물론 객체 매핑에도 양방향이 가능하다.
@OneToOne,@OneToMany,@ManyToOne,@ManyToMany의 경우 뒤쪽이 현재 객체가 가지는 형태다.
주인
- join key를 갖는 쪽이 주인이 된다.(
@JoinColumn) - 객체에서 주인이 아닌 경우
mappedBy로 참조를 하면 된다.
복합 기본 키
- JPA는 복합 키를 사용하려면 별도의 식별자 클래스가 필요하다.
@IdClass@IdClass를 사용해서 식별자 클래스를 지정하면 된다.- 복합키는 별도의 식별자 클래스로 만들어야 한다.
- serializable을 구현해야 한다.
- equals, hashCode를 구현해야 한다.
- 기본 생성자가 있어야 한다.
- 식별자 클래스는 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; } ```