책 [자바 ORM 표준 JPA 프로그래밍]을 참고하여 작성하였습니다.

@Entity
pubic class Member{
@Id
@Column(name="MEMBER_ID")
private String id;
private String username;
@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team;
public void setTeam(Team team){
tihs.team = team;
}
//getter, setter 세팅 생략
}
@Entity
public class Team{
@Id
@Column(name="TEAM_ID")
private String id;
private String name;
//getter, setter 세팅 생략
}
fetch : 글로벌 페치 전략 설정@ManyToOne=FetchType.EAGER, @OneToMany=FetchType.LAZY)cascade : 영속성 전이 기능 사용name : 매핑할 외래키 이름 지정연관관계의 주인이라고 함.mappedBy 속성을 사용하여 연관관계의 주인을 설정한다.테이블의 다대일, 일대다 관계에서는 항상 '다' 쪽이 외래키를 가짐
-> 항상 '다' 쪽이 연관관계의 주인이 됨
-> 따라서@ManyToOne에는 mappedBy 설정이 없다
아래 예시에서는 회원 테이블이 외래키를 가지고 있으므로 Member.team이 주인이다.

@Entity
public class Member{
@Id
@Column(name="MEMBER_ID")
private String id;
private String username;
@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team;
public void setTeam(Team team){
this.team = team;
}
//getter, setter 설정 생략
}
@Entity
public class Team {
@Id
@Column(name="TEAM_ID")
private String id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<Member>();
//getter, setter 설정 생략
}
@Entity
@Data
public class Member{
@Id
@GeneratedValue
@Column(name="MEBMER_ID")
private Long id;
private String name;
private String city;
private String street;
private String zipcode;
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<Order>();
}
@Entity
@Data
@Table(name="ORDERS")
public class Order {
@Id
@GeneratedValue
@Column(name="ORDER_ID")
private Long id;
@ManyToOne
@JoinColumn(name="MEMBER_ID") //외래키 : MEMBER_ID
private Member member; //외래키가 있는 Order.member가 연관관계의 주인
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<OrderItem>();
@Temporal(TemporalType.TIMESTAMP)
private Date orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
}
(주문 상품에서 상품을 참조할 일은 많으나, 반대의 경우는 거의 없으므로 주문상품과 상품은 다대일 단방향 관계로 설정)
@Entity
@Data
@Table(name="ORDER_ITEM")
public class OrderItem{
@Id
@GeneratedValue
@Column(name="ORDER_ITEM_ID")
private Long id;
@ManyToOne
@JoinColumn(name="ITEM_ID")
private Item item;
@ManyToOne
@JoinColumn(name="ORDER_ID")
private Order order;
private int orderPrice;
private int count;
}
@Entity
@Data
public class Item{
@Id
@GeneratedValue
@Column(name="ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
~6장~
일대다의 반대방향은 항상 다대일
일대일의 반대는 항상 일대일
다대다 관계는 실무에서 거의 사용하지 않음.