
값 타입과 불변 객체 값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념이다. 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 값 타입 공유 참조 예시 JpaMain 현재 member1과 member2는 같은 address를 쓰고 있다. 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 { Addr..

임베디드 타입 예제 매핑하면 임베디드 타입 사용법 임베디드 타입의 장점 임베디드 타입과 테이블 매핑 (1) 실습예제 Member (대폭 수정) @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; private LocalDateTime startDate; private LocalDateTime endDate; private String city; private String street; private String zipcode; } 실행하면 Hibernate: cr..

JPA의 데이터 타입 분류 값 타입 분류 기본값 타입 참고 : 자바의 기본 타입은 절대 공유 x 예시 1 public class ValueMain { public static void main(String[] args) { int a = 10; int b = a; // 이 타이밍에 a = 10이 복사가 되어서 b로 넘어간다. // 즉, 둘은 완전히 따로따로 값을 가진다. a = 20; // a값 변경 => a만 값을 변경한다. System.out.println("a = " + a); // a = 20 System.out.println("b = " + b); // b = 10 출력됨 // 값이 변경이 안 된다. } } 예시 2 public class ValueMain { public static void ..

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

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();..