목록Spring/JPA 공부 (39)
코드 그라데이션
1. 글로벌 페치 전략 설정 static import 하면 더 깔끔하게 쓸 수 있음 클래스에다가 import static javax.persistence.FetchType.*; => 정적 임포트 추가 Category @ManyToOne(fetch = LAZY) @JoinColumn(name = "PARENT_ID") private Category parent; @ManyToOne은 기본이 LAZY 이기 때문에 굳이 안 써줘도 된다. Delivery @OneToOne(mappedBy = "delivery", fetch = LAZY) private Order order; Order @ManyToOne(fetch = LAZY) @JoinColumn(name = "MEMBER_ID") private Member..
고아 객체 예제 Parent 수정 @OneToMany(mappedBy = "parent",cascade = CascadeType.ALL, orphanRemoval = true) // 양방향 매핑 완료, CASCADE옵션 추가, 고아객체 제거 private List childList = new ArrayList(); JpaMain public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.g..
영속성 전이(CASCADE) 즉시 로딩, 지연 로딩, 연관관계 매핑과 전혀 관계가 없음. 영속성 전이: 저장 영속성 전이: CASCADE - 주의! CASCADE의 종류 예제 Parent @Entity @NoArgsConstructor public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") // 양방향 매핑 완료 private List childList = new ArrayList(); public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getNa..
지연 로딩 활용 매우 이론적인 내용. 실무에서는 그냥 모두 LAZY를 기본으로 세팅하기. 지연 로딩 활용 - 실무
Member와 Team을 자주 함께 사용한다면? 즉시 로딩 EAGER 를 사용해서 함께 조회 Member 엔티티 변경 즉시 로딩 즉시 로딩(EAGER), 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();..
반복된 고민 예시 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..