
@MappedSuperclass 예시 상황가정 이 애플리케이션은 모든 곳에 등록, 수정과 관련된 정보가 항상 있어야 한다. 이 때 Member에 private String createdBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; 써 줘도 되지만 번거롭고 중복되므로 BaseEntity로 묶어서 새로 하나 만들고, @MappedSuperClass 넣어주고, 나머지 클래스는 이 클래스를 상속받게 만든다. BaseEntity @MappedSuperclass // 매핑 정보만 받는 부모클래스 public class BaseEntity { private String..

개념 설명 상속관계 매핑 정리하자면, DB의 슈퍼타입-서브타입 모델링 기법을 3가지 방법 중 어떤 걸 선택하여 구현해도 다 매핑할 수 있도록 JPA가 지원해줌. 주요 어노테이션 도입 단일 테이블 전략 (1) 부모 클래스 Item @Entity public abstract class Item { @Id @GeneratedValue private Long id; private String name; private int price; } Album @Entity public class Album extends Item { private String artist; } Book @Entity public class Book extends Item { private String author; private Stri..

배송, 카테고리 추가 - 엔티티 배송, 카테고리 추가 - 엔티티 배송 카테고리 추가 - 엔티티 상세내용 코드변경 새로생긴 Category @Entity @NoArgsConstructor public class Category { @Id @GeneratedValue private Long id; private String name; //자식입장에서 부모 하나 있으므로 @ManyToOne @JoinColumn(name = "PARENT_ID") private Category parent; // 양방향으로까지 잡아줌 @OneToMany(mappedBy = "parent") private List child = new ArrayList(); // 카테고리가 쭉 내려가는 것을 구현한 것 // 아이템과 다대다 관계..

다대다 실습 새로 생성 Product @Entity @NoArgsConstructor public class Product { @Id @GeneratedValue private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } Member 에다가 @ManyToMany @JoinTable(name = "MEMBER_PRODUCT")// 테이블명 적어줘야 private List product..

일대일 관계 일대일: 주 테이블에 외래 키 단방향 • 다대일(@ManyToOne) 단방향 매핑과 유사 일대일 : 주 태이블에 외래 키 양방향 일대일: 주 테이블에 외래 키 양방향 정리 실습 Locker @Entity @NoArgsConstructor public class Locker { @Id @GeneratedValue private Long id; private String name; } Member에 추가 @OneToOne @JoinColumn(name = "LOCKER_ID") private Locker locker; 실행하면 Hibernate: create table Locker ( id bigint not null, name varchar(255), primary key (id) ) Hibe..

여기서는 1이 연관관계 주인 1 방향에서 연관관계를 관리하겠다. 영한쌤은 이 모델을 추천하지 않음. 이제는 팀을 기준으로 매핑을 처리하고 싶으 객체 연관관계에서는 Team을 기준으로 멤버를 알고 싶은데, 멤버를 기준으로는 별로 팀을 알고 싶지 않은 그런 상태 일대다 단방향 => 즉, Team에 있는 members를 바꾸면, MEMBER 테이블의 TEAM_ID도 변경이 되어야 한다. 코드로 살펴보면 Member @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERN..

다대일 단방향 MEMBER 입장에서 TEAM_ID는 이걸 통해 TEAM으로 찾아가기 위한 것이고, 같은 레벨로 (객체)Member에서 Team team 이라는 참조값도 동일한 의미. 다시 예시 앞에 했던 것들은 커밋 기록 남아있으니까 꽤 지우고 Member @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team te..

연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 단방향, 양방향 연관관계의 주인 • 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 • 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 • 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키를 관리할 곳을 지정해야함 • 연관관계의 주인: 외래 키를 관리하는 참조 • 주인의 반대편: 외래 키에 영향을 주지 않음, 단순 조회만 가능