JPAオブジェクトの双方向および一方向の関連付け



これらの構造の関連関係を確立するために開発されました

メンバー・オブジェクト

@Entity
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "MEMBER_ID")
    private Long id;

    private String name;
    private String city;
    private String street;
    private String zipcode;

    @OneToMany(mappedBy = "memberId") // Order에서 외례키로 설정되어 있는 memberId 변수를 mappedBy로 설정
    private List<Order> orderList = new ArrayList<>(); //new ArrayList<>()로 초기화 시켜주는 것이 JPA에서의 관례
}

Orderオブジェクト

@Entity
@Table(name = "ORDERS")
public class Order {

    @Id
    @GeneratedValue() //Default strategy = auto
    @Column(name = "ORDER_ID")
    private Long id;


    @ManyToOne // N:1 관계; Member가 여러개의 주문을 할 수 있지만, 주문서는 하나의 Member랑만 연관 되어 있음
    @JoinColumn(name = "MEMBER_ID") // ... member m JOIN orders o ON m.MEMBER_ID = o.MEMBER_ID;
    private Member memberId; // memberId에 Member 객체 자체를 주입 함

    private LocalDateTime orderDate;

    @Enumerated(value = EnumType.STRING)
    private OrderStatus status;

    @OneToMany(mappedBy = "orderId")
    private List<OrderItem> orderItemList = new ArrayList<>();
}

OrderItemオブジェクト

@Entity
public class OrderItem {

    @Id
    @GeneratedValue()
    @Column(name = "ORDER_ITEM_ID")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "ORDER_ID")
    private Order orderId;

    @ManyToOne
    @JoinColumn(name ="ITEM_ID")
    private Item itemId;

    private Integer orderPrice;
    private Integer count;

}

Itemオブジェクト

@Entity
public class Item {

    @Id
    @GeneratedValue()
    @Column(name = "ITEM_ID")
    private Long id;

    private String name;
    private Integer price;
    private Integer stockQuantity;
}
双方向マッピング規則/注意事項
1.関連関係の所有者として、関連関係内のオブジェクトの2つの関係の1つを指定します.このとき、所有者は外部キーを持つオブジェクトを所有者とします.mappedBy=「変数名」を使用して非所有者オブジェクトを設定します.
2.マスター以外の読み取り専用
3.オブジェクト向けの設計を行うには、関連関係の両方のオブジェクト値が設定可能であることを確認します.
예시:
orderA.setMemberId(member);
member.getOrderList().add(orderA);
4.関連関係マッピングを完了するには、一方向のみです.そのため、まず、一方向関連を正しく設定します.必要に応じて双方向の関連付けを設定します.
테이블 연관관계 매핑과 달리, 객체들의 양방향 연관관계 설정은 단방향 연관관계를 2번 매핑하는 것입니다. 
테이블 연관관계 매핑에서의 True 양방향 연관관계 설정과는 차이가 나는 부분입니다.
또한, 테이블에서는 외래 키 하나로 양쪽 JOIN이 가능하기 때문에, 방향성을 따질 필요가 없습니다.