본문 바로가기
반응형

Backend, Server53

[JPA] JPQL 기초 - (2) 조인, 서브쿼리, 조건식, JPQL 함수 조인 // []는 생략 가능 • 내부 조인: SELECT m FROM Member m [INNER] JOIN m.team t • 외부 조인: SELECT m FROM Member m LEFT [OUTER] JOIN m.team t • 세타 조인: select count(m) from Member m, Team t where m.username = t.name 조인 - on 활용 1. 조인 대상 필터링 • 예) 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인 JPQL: SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A' SQL: SELECT m.*, t.* FROM Member m LEFT JOIN Team t ON m.TEAM_ID=t.id a.. 2021. 12. 20.
[JPA] JPQL 기초 - (1) 파라미터 바운딩, 프로젝션, 페이징 JPQL(Java Persistence Query Language) • JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공(특정데이터베이스 SQL에 의존하 지 않는다.) • SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원 • JPQL은 엔티티 객체를 대상으로 쿼리 • SQL은 데이터베이스 테이블을 대상으로 쿼리 TypeQuery, Query • TypeQuery: 반환 타입이 명확할 때 사용 • Query: 반환 타입이 명확하지 않을 때 사용 TypedQuery query = em.createQuery("SELECT m FROM Member m", Member.class); Query query = em.createQuery("SE.. 2021. 12. 19.
[JPA] 값 타입 알아보기 엔티티 타입 VS 값 타입 • 엔티티 타입 • @Entity로 정의하는 객체 • 데이터가 변해도 식별자로 지속해서 추적 가능 • 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 • 값 타입 • int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 • 식별자가 없고 값만 있으므로 변경시 추적 불가 • 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 • 값 타입은 기본값 타입, 임베디드 타입, 컬렉션 값타입으로 구성됨 값 타입은 기본값 타입, 임베디드 타입, 컬렉션 값타입으로 구성됨 기본값 타입 - String, int - 생명주기를 엔티티에 의존(회원을 삭제하면 이름, 나이 필드도 같이 삭제됨) - 값 타입은 공유하면 안됨(회원 이름 변경.. 2021. 12. 19.
[JPA] 프록시, 즉시 로딩과 지연 로딩, 영속성 전이, 고아 객체 프록시 프록시란? - em.find() 대신 em.getReference() 사용 - 프록시는 데이터베이스 조회를 미루는 가짜 엔티티 객체를 조회한다. 프록시의 특징 - 실제 클래스를 상속받아 만들어지고, 겉모습이 같다. - 사용하는 입장에서는 이론상 프록시인지 진짜 객체인지 구분하지 않고 사용 - 프록시 객체는 실제 객체의 참조(target)을 보관 - 프록시 객체 호출 시 실제 객체의 메서드를 호출(delegate) 프록시 객체 초기화 초기화 시 영속성 컨텍스트를 통해 db를 조회한다. Member member = em.getReference(Member.class, “id1”); member.getName(); 주의할 점 - 처음 사용할때 한번만 초기화된다. - 초기화를 한다고 프록시 객체가 실제 .. 2021. 12. 15.
[JPA] 고급 매핑 - 상속관계 매핑, @MappedSuperclass 1. 상속관계 매핑 관계형 데이터베이스는 상속 관계를 가지지 않는다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑은 객체의 상속과 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것. 슈퍼타입 서브타입 논리 모델을 실제 모델로 구현하는 방법은 세 가지가 있다. - 조인 전략(각각 테이블로 변환) - 단일 테이블 전략(통합 테이블로 변환) - 구현 클래스마다 테이블 전략(서브타입 테이블로 변환) - 조인 전략 아래처럼 슈퍼타입 객체에 @Inheritance 어노테이션을 달아주면 된다. 조인 전략은 속성으로 InteritanceType.JOINED 해주면 된다. 여기에 DTYPE까지 추가시키고 싶을 때는 @DiscriminatorColumn(name = "DTYPE")을 추.. 2021. 12. 14.
[JPA] 다양한 연관관계 매핑 - 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 1. 다대일 N:1 - 다대일 단방향 가장 많이 사용하는 연관관계 - 다대일 양방향 외래키가 있는 쪽이 연관관계의 주인이 된다. 2. 일대다 1:N - 일대다 단방향 • 일대다 단방향은 일대다(1:N)에서 일(1)이 연관관계의 주인 • 테이블 일대다 관계는 항상 다(N) 쪽에 외래 키가 있음 • 객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하는 특이한 구조 • @JoinColumn을 꼭 사용해야 함. 그렇지 않으면 조인 테이블 방식을 사용함(중간에 테이블을 하나 추가함) • 일대다 단방향 매핑의 단점 • 엔티티가 관리하는 외래 키가 다른 테이블에 있음 • 연관관계 관.. 2021. 12. 14.
반응형