목록Spring/JPA 공부 (39)
코드 그라데이션
자바 ORM 표준 JPA 프로그래밍(김영한 저) 책의 QnA 파트 괄년 내용을 그대로 가져왔다. 유의해서 JPA 공부에 활용하려구... Q1. ORM 프레임워크를 사용하면 SQL과 Database는 잘 몰라도 되나요? A1. No. ORM 프레임워크가 애플리케이션을 객체지향적으로 개발할 수 있도록 도와주긴 하지만 데이터는 결국 관계형 데이터베이스에 저장된다. 테이블 설계는 여전히 중요하고 SQL도 잘 알아야 한다. 그리고 ORM 프레임워크를 사용할 때 가장 중요한 점은 객체와 테이블을 매핑하는 것이다. 매핑을 올바르게 하려면 객체와 관계형 데이터베이스 양쪽을 모두 이해해야 한다. 따라서 데이터베이스 테이블 설계나 SQL을 잘 몰라서 ORM 프레임워크를 사용한다는 것은 ORM의 본질을 잘못 이해한 것이다...
JPQL 소개 기본 예제 새로운 프로젝트로 진행 초기 세팅 값 Address @Embeddable public class Address { private String city; private String street; private String zipcode; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getZipcode() { return zipcode; } p..
참고 equals() and hashcode() 구현 시 "Use getters during code generation" 옵션 사용하세요. 이 옵션을 선택하면 getter를 호출한다. 이걸 선택하지 않으면 필드에 직접 접근함. 필드에 직접 접근하면 문제 발생 무엇이? Proxy일 때, 계산이 안 된다. 그래서 JPA에서는 메서드를 통해서 값을 호출하도록 코드를 구현하는게 좋다. 그게 안전하다. 예제 6. 값 타입 매핑 구조도 1. Address 테이블 생성 @Embeddable public class Address { private String city; private String street; private String zipcode; public String getCity() { return cit..
미리 결론 스포, 값 타입 컬렉션은 언제 쓰는가? => 매우 단순한 상황일때만 쓰자!(라고 하기도 좀 그렇고, 쓰는 걸 고려하자 정도가 맞다.) => 대부분 다 엔티티로 만들어서 사용한다. 값 타입 컬렉션 값 타입을 컬렉션에 담아서 쓰는 것 그림 예제 Member 클래스 변경 @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @Embedded private Address address; @ElementCollection @CollectionTable(name =..
값 타입의 비교 예시 public class ValueMain { public static void main(String[] args) { int a = 10; int b = 10; System.out.println("a == b : " + (a==b)); // true 출력 Address address1 = new Address("seoul", "garosugil", "10000"); Address address2 = new Address("seoul", "garosugil", "10000"); System.out.println("address1 == address2 : " + (address1==address2)); } } 실행 결과 값 타입의 비교 - 동일성 비교와 동등성 비교 그 전에 public..
값 타입과 불변 객체 값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념이다. 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 값 타입 공유 참조 예시 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 ..