
반복된 고민 예시 Member - Team을 살짝 변경 JpaMain public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { //팀도 세팅 Team team = new Team(); team.setName("teamA"); em.persist(team); Member member1 = new Member(); member1..

Member를 조회할 때 Team도 함께 조회해야 할까? 실습 Member와 Team을 조회해서 가져오려고 하면 그러면 어느 경우에는 Team까지 함께 가져오고, 어떨 때는 Member만 가져오는 쿼리를 날릴 수 있을까에 대한 고민 JpaMain public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { //데이터를 넣었다고 ..

요구사항 추가 • 상품의 종류는 음반, 도서, 영화가 있고 이후 더 확장될 수 있다. • 모든 데이터는 등록일과 수정일이 필수다. 도메인 모델 도메인 모델 상세 테이블 설계 고친 클래스 Item 추상 클래스로 바꾸고 전략 명시 @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn public abstract class Item { } Album @Entity public class Album extends Item { private String artist; private String etc; public String getArtist() { return artist; } public void setArtist..

@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..