실전! Querydsl 강의 정리 3편 들어가기전 Spribgboot + Querydsl 설정 https://devfunny.tistory.com/844 [Querydsl 1편] SpringBoot2.7 + Querydsl5.0 설정하기 (Entity, Dto class to QClass) 실전! Querydsl 강의 정리 2편 Querydsl 설정 build.gradle ▶ querydsl 의존성 추가 //querydsl 추가 implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" // querydsl 라이브러리 annotationProcess.. devfunny.tistory.com 예제 Entity 설정하기 https://devfunny.tis..
실전! Querydsl 강의 정리 2편 DTO 클래스 생성 MemberDto.java package study.querydsl.dto; import com.querydsl.core.annotations.QueryProjection; import lombok.Data; import lombok.Getter; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString public class MemberDto { private String username; private int age; public MemberDto() { } } MemberTeamDto.java package study.querydsl.dto; import com.quer..
실전! Querydsl 강의 정리 2편 Querydsl 설정 build.gradle ▶ querydsl 의존성 추가 //querydsl 추가 implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" // querydsl 라이브러리 annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}" // Querydsl 관련 코드 생성 기능 제공 ▶ 전체코드 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-managem..
다대일 (N:1) 다대일 관계의 반대 방향을 항상 일대다 관계이고, 일대다 관계의 반대 방향은 항상 다대일 관계이다. 외래키는 항상 다(N)쪽에 있으며, 그러므로 연관관계의 주인은 항상 다(N) 쪽이다. - 단방향 MemberA.java import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.*; @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class MemberA { @Id @Column(name= "ID") @GeneratedValue(..
JPA 연관관계 키워드 키워드 설명 방향 (Direction) - 단방향, 양방향이 있다. - 단방향 관계 : 회원과 팀의 관계가 있을때 회원 -> 팀 또는 팀 -> 회원 중 한쪽만 참조하는 것 - 양방향 관계 : 회원 -> 팀, 팀 -> 회원 양쪽 모두 서로 참조하는 것 - 방향은 객체 관계에서만 존재하고 테이블 관계는 항상 양방향이다. 다중성 (Multiplicity) - 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이 있다. 연관관계의 주인 (owner) - 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야한다. 단방향 연관관계 객체 연관관계 회원 객체는 Member.team 필드(멤버변수)로 팀 객체와 연관관계를 맺는다. 회원 객체와 팀 객체는 단방향 관계다. 회원..
@Entity 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야한다. 기본 생성자는 필수다. (public 또는 protected) final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 final을 사용하면 안된다. JPA가 엔티티 객체를 생성할때 기본 생성자를 사용하므로 이 생성자는 반드시 있어야한다. @Table 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다. 다양한 매핑 사용 Member.java import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.util.Date; @Entity @Table..
엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); 위 코드를 호출하면 META-INF/persistence.xml에 있는 정보를 바탕으로 EntityManagerFactory를 생성한다. ... 이제부터 필요할 때마다 엔티티 매니저 팩토리에서 엔티티 매니저를 생성하면 된다. EntityManager em = emf.createEntityManager(); 엔티티 매니저 팩토리는 엔티티 매니저를 만드는 공장으로 이해하면 된다. 공장을 만드는 비용은 상당히 크므로, EntityManagerFac..
ORM ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매핑한다. ORM 프레임워크는 객체와 테이블을 매핑한다. ORM 프레임워크 사용 장점 1) 객체를 데이터베이스에 저장할때 INSERT SQL을 직접 장성하지 않고 객체를 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장한다. 2) 개발자가 데이터 중심인 관계형 데이터베이스를 사용하더라도 객체지향 어플리케이션 개발에 집중할 수 있다. 하이버네이트 대부분의 패러다임 불일치 문제를 해결해주는 ORM 프레임워크다. 하이버네이트(hibernate.org)라는 오픈소스 ORM 프레임워크가 등장하면서 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준이 만들어졌는데, 이것이 바로 JPA다. 패러다임 불일치란? 추상화, 상속..
예제코드 Member.java package jpql; import javax.persistence.*; @Entity @Table(name="MEMBER") public class Member { @Id @GeneratedValue private Long id; private String username; private int age; @ManyToOne(fetch = FetchType.LAZY) // Many 쪽(Member)에 TEAM_ID 컬럼 생성됨 @JoinColumn(name = "TEAM_ID") private Team team; @Enumerated(EnumType.STRING) private MemberType type; public void setType(MemberType type)..
1) 연관관계 적용 Member member = new Member(); member.setUsername("kimseohae"); member.setAge(10); Team team = new Team(); team.setName("team1"); team.setName("team"); member.setTeam(team); em.persist(team); em.persist(member); em.flush(); em.clear(); 2) Join 예제 - Inner TypedQuery query = em.createQuery("select m from Member as m inner join m.team t", Member.class); List resultList = query.getResultLi..
예제코드 Member.java package jpql; import javax.persistence.*; @Entity @Table(name="MEMBER") @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String username; private int age; ... } Main.java package main.paging; import jpql.Member; import javax.persistence.*; import java.util.List; public class JpaMain { public static void main(String[] args) { EntityManagerFactory..
테이블 구조 부모테이블 자식테이블 식별자 클래스 ParentA.java ChildA.java ParentAId.java ParentB.java ChildB.java ParentBId.java @IdClass 1) ParentA.java package com.book.jpa.chapter07.identifying.idClass; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; @Entity @IdClass(ParentAId.class) public class ParentA { @Id @Column(name = "PARENT_I..