목록Tech (57)
지나공 : 지식을 나누는 공간
JPQL 타입 표현 문자 : 'HI', 'He''s' -> ' '안에 (')을 넣어야 할 때는 작은 따옴표 두 개 사용해서 표현 숫자 : 10L(Long), 10D(Double), 10F(Float) Boolean : true, false enum : 패키지명을 모두 포함해서 적어야 함. public enum MemberType{ ADMIN, USER; } public class Member{ @Enumerated(EnumType.STRING) private MemberType type; //기본이 EnumType.ORDINAL이므로 항상 STRING으로 변경해주어야 함 } String query = "select m.username from Member m " + "where m.type = jpql...
오늘 알아볼 내용은, 조인의 종류 조인쿼리 실행하기 ON절 조회 대상 필터링 (조인을 하되 조건을 걸고 부합하는 것만 조인) 연관관계 없는 엔티티 조인 서브쿼리 (중요) JPA 서브쿼리의 한계 조인의 종류 내부 조인 SELECT m FROM Member m [INNER] JOIN m.team t (inner는 생략 가능) 외부 조인 SELECT m FROM Member m LEFT [OUTER] JOIN m.team t (outer는 생략 가능) 세타 조인 ( 연관관계가 전혀 없는것을 비교해보는조인) select count(m) from Member , Team t where m.username = t.name 조인 쿼리 실행하기 Team과 Member가 연관관계를 가진 상태라고 하면 아래와 같이 조인 ..
이번에 다룰 내용은, 프로젝션과 영속성컨텍스트 관리여부 여러 필드의 값을 조회하는 방법 세 가지 페이징 프로젝션이란? SELECT 절에 조회할 대상을 지정하는 것 프로젝션 대상 : 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자 등 기본 데이터 타입) 예시 SELECT m FROM Member m -> 엔티티를 조회하니까 엔티티 프로젝션 SELECT m.team FROM Member m -> 엔티티 프로젝션 (멤버에 연관된 팀 엔티티를 가져오니까) SELECT m.address FROM Member m -> 임베디드 타입 프로젝션 SELECT m.username, m.age FROM Member m -> 스칼라 타입 프로젝션 DISTINCT로 중복 제거 영속성 컨텍스트에 관리되는가? em.flush()..
이건 개인적으로 잘 몰랐던 부분만 기록할 예정. JPQL 문법의 특징 select m from Member as m where m.age > 18 엔티티와 속성은 대소문자를 구분한다. JPQL 키워드는 대소문자 구분을 하지 않는다. select, from where 등은 대소문자 다 가능 엔티티 이름을 사용한다. 테이블 이름을 사용하지 않는다. 별칭은 필수이고 as는 생략 가능하다. hibernate는 별칭 안 써도 가능은 한데 본래 문법은 별칭 필수다. 클래스 이름이 똑같다면...클래스 이름을 바꾸는 게 안 헷갈리고 낫습니다... @Entity(name = "MM") public class Member{ @Id @GeneratedValue private Long id; } 위의 코드에서 엔티티 이름은 ..
여기서 알아볼 내용은, 값 타입 컬렉션 사용하는 예제 : 저장, 조회, 수정 등 값 타입 컬렉션 주의사항 실무에서의 사용법 팁 값 타입 컬렉션은 언제 쓰는지 JPA 타입 정리 문제상황 Member처럼 컬렉션을 가지면 1대 다 관계를 유지하지만 DB 테이블은 특성 상 한 객체가 컬렉션을 가지는 것을 구현하기 어렵다. 그래서 Member에 Favorite Food가 있다면 이걸 별도의 테이블로 보관해야 한다. 그래야 관리할 수 있다. 일단 매핑을 해보자. 값 타입 매핑은 @ElementCollection으로 해야 하고, 테이블명 정하는 건 CollectionTable에서 name을 통해 할 수 있다. MEMBER_ID를 가지고 JOIN하겠다는 의미이다. 값 타입 컬렉션 값 타입을 하나 이상 저장할 때 사용하..
(JPA7에 이어지는 내용) 이번에 알아볼 내용은, 값 타입의 공유 참조와 그 부작용 공유 참조 시 부작용 피하기 객체 타입의 한계 불변 객체 값 타입의 비교 값 타입 공유 참조 임베디드 타입과 같은 값 타입을 여러 엔티티에서 공유하면 위험하다. (부작용 발생) 부작용 주의! Address address = new Address("city","street","10000"); //member1 생성 Member member1 = new Member(); member1.setAddress(address); em.persist(member1); //member2 생성 Member member2 = new Member(); member2.setAddress(address); em.persist(member2);..
이번에 알아볼 내용은, 기본값 타입과 값 타입의 분류 임베디드 타입(복합 값 타입) - > 중요 임베디드 타입의 활용 임베디드 타입의 중복 해결 임베디드 타입과 null JPA의 데이터 타입 분류 [엔티티 타입] Entity로 정의하는 객체 내부 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 이름, 나이를 변경해도 id100번이면 id를 보고 이 엔티티를 인식할 수 있다. [값 타입] int, Integer, String 같은 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없이 값만 있으므로 변경되면 추적 불가능 값 타입의 분류 임베디드 타입 : X좌표, Y좌표를 한 번에 사용하고자 묶어서 '위치'로 사용하고 싶을 때 사용. 컬렉션 값 타입 : 임베디드 타입이나 값 타입을 자..
이번 포스팅에서 공부할 내용은! ->영속성 전이 (CASCADE) : 정의, 주의점, 종류 ->고아 객체 : 정의, 주의 -> (영속성 전이 + 고아 객체)와 생명주기 영속성 전이란? (CASCADE) 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶은 경우에 사용합니다. 예를 들어 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장하거나, 부모 엔티티를 삭제할 때 관련된 자식엔티티도 함께 삭제하고 싶을 때 사용합니다. 영속성 전이 : 저장 (PERSIST) 아래의 예시를 봅시다. 현재 Parent와 Child는 1:N 연관관계 (@OneToMany, @ManyToOne 사용)를 가진 상태입니다. public class JpaMain(){ public static void m..
이번 포스팅에서 공부할 것은, 프록시 들어가기 프록시의 개념과 특징 프록시 확인하기 즉시로딩(EAGER)과 지연로딩(LAZY) N+1의 문제 들어가기 Team 과 Member가 1:N으로 매핑될 때를 생각해보자. member를 가져올 때 연관관계가 있다고 해서 항상 team도 가져온다면, 최적화가 되지 않은 상황이 될 것이다. 하지만 언젠가 member를 가져오면서 그 멤버가 속한 team의 정보도 사용해야 할 때도 있을 것이다. 이 경우에는 한 번에 둘 다 가져와야 하고, 또 가져오려니 항상 가져오면 낭비가 심하고. 이 부분에 대한 JPA의 해결을 오늘 공부할 예정이다. 프록시란? 먼저, em.find() vs em.getReference() 에 대하여 find()는 데이터베이스를 통해 실제 엔티티를 ..
필수 어노테이션정리 @Entity -> JPA를 사용해서 데이터베이스의 테이블과 매핑할 클래스에 필수로 명시해야 하는 어노테이션 제약사항 1. 파라미터가 없는 protected나 public의 기본생성자가 필수로 있어야 함 (Entity를 JpaRepository에서 가져올 때 기본생성자를 사용하므로) 2. 필드에 final 클래스, enum, interface, inner 클래스를 사용할 수 없음 속성 name : 엔티티 이름을 지정하는 속성, 기본값은 클래스이름 @Table -> 해당 엔티티와 매핑할 테이블을 지정하는 어노테이션 속성 name : 매핑할 테이블 이름을 지정, 기본값은 엔티티 이름 (아래 사진에서 ORDERS라고 지정했지만 안 써도 테이블명이 ORDERS다.) catalog : 데이터베..