JPA/ORM 표준 JPA

JPA/ORM 표준 JPA

[ORM 표준 JPA] 12. JPQL 기본 함수 정리

JPA에서의 JPQL과 SQL 사용 이해 Java Persistence API(JPA)를 사용하면서 JPQL(Java Persistence Query Language)과 SQL을 어떻게 활용하는지 이해하는 것은 중요하다.JPQL과 SQL은 각각 다른 접근 방식과 목적을 가지고 있다.JPQL의 기본 구조와 사용 JPQL은 엔티티 객체를 대상으로 쿼리를 작성한다.이는 SQL과 다르게 데이터베이스 테이블이 아닌, 엔티티 클래스에 직접 쿼리를 수행한다. 아래 쿼리는 Member 엔티티에 대해 이름에 'kim'이 포함된 모든 회원을 조회한다.기본 jpql List memberList = em.createQuery("select m From Member m where m.username like '%kim%'", ..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 11. Embadded, 값 타입

JPA의 기본 값 타입에 대한 이해 Java Persistence API(JPA)는 객체 관계 매핑을 통해 데이터베이스와 객체 지향 프로그래밍을 연결한다.JPA에서는 데이터 타입을 크게 엔티티 타입, 값 타입으로 분류한다. 엔티티 타입(Entity Type)엔티티 타입은 데이터베이스의 테이블에 해당하는 클래스이다.각 엔티티 인스턴스는 고유한 식별자(ID)를 가지며, 이 식별자를 통해 데이터가 변경되어도 지속적으로 추적이 가능하다. 값 타입(Value Type)값 타입은 단순한 값을 나타내는 타입으로, Java의 기본 타입(int, double 등)이나 래퍼 클래스(Integer, Long 등), String과 같은 객체이다.값 타입은 고유의 식별자를 가지지 않으며, 그 값 자체로 사용된다. 값 타입의 분..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 10. 프록시와 N + 1 문제 FetchType.LAZY

Lazy 로딩과 Eager 로딩 연관관계 매핑에서 중요한 부분은 엔티티 간의 관계를 어떻게 효율적으로 불러오는가에 대한 전략이다.이는 Lazy 로딩과 Eager 로딩으로 나뉜다. 각각의 상황에 맞는 로딩 전략을 선택하는 것은 애플리케이션의 성능에 큰 영향을 미친다. Lazy 로딩: 연관된 엔티티를 실제로 사용할 때까지 로딩을 지연시키는 방법이다. 이 방법은 메모리 사용량을 최적화하고, 성능을 향상시킬 수 있다. Eager 로딩: 연관된 엔티티를 즉시 로딩하는 방법이다. 필요하지 않은 데이터까지 미리 로딩하기 때문에 성능 저하의 원인이 될 수 있다. Lazy와 Eager 사용 사례Lazy 로딩의 적용Member 엔티티만 필요한 경우, Team 엔티티를 함께 로딩하지 않는 것이 효율적이다. 이는 메모리 사용..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 9.고급매핑 - 상속관계 매핑, @MappedSuperclass

상속관계 매핑관계형 데이터베이스는 상속관계가 존재하지 않는다.객체는 상속관계가 존재한다. DB에 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 조인 전략ITEM에 기본 값들을 두고, DTYPE로 상속받은 객체들을 구별하여 쓰는 방식이다. 단일 테이블 전략한개의 테이블에 모든 컬럼을 추가하여 사용하는 방식이다. 구현 클래스마다 테이블 전략각 클래스마다 테이블을 생성하는 방식이다.   위 방법들은 DB가 상속을 지원하지 않기 때문에, 사용하는 방식이다. 어떠한 방식으로 해도 객체는 그대로하면 된다.JPA는 위 3가지 방식을 모두 지원한다.JPA 기본 전략 자체는 한 테이블 안에 모든 컬럼으로 구성하는 것..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 8.다양한 연관관계 매핑

DB 테이블DB 테이블에는 외래 키 하나로 양쪽에 조인이 가능하다. 저번 글에서 언급했듯이, 방향이라는 개념이 없다.  객체참조용 필드가 있는 쪽으로만 참조가 가능하다.사실, 양방향이라는 개념이 있는 것이 아니라 단방향이 2개 있는 것이다. 사람들이 이해하기 쉽게 양방향으로 설명을 하는 것이지, 객체 입장에선 방향이 1개이다. 연관관계 주인테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다.객체 양방향 관계는 참조가 2군데이다.객체 양방향 관계는 참조가 2군데이며 둘 중 테이블의 외래 키를 관리할 곳을 지정해줘야한다.연관관계의 주인: 외래 키를 관리하는 참조주인의 반대편: 외래 키에 영향을 주지 않음, 단순 조회만 가능함 다대일 [N:1] DB 입장관계형 DB에는 다(N) 쪽에 외래키를 두는 것이 기..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 7. 연관관계 매핑2 양방향 연관관계와 연관관계의 주인

양방향 매핑이전에 Member는 Team을 통해 team의 정보를 얻을 수 있었다.그렇다면 Team에서는 Member로 갈 방법이 없을까?findTeam.getMember() 를 사용할 수 없다. 그러므로 Team에다가 List members를 만들어줘야한다. Team 클래스@Entity@Getter@Setterpublic class Team {    @Id @GeneratedValue    @Column(name = "TEAM_ID")    private Long id;    private String name;    @OneToMany(mappedBy = "team")    private List memberList = new ArrayList();} Team Entity에다가 List members..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 6. 연관관계 매핑 1

DB에서 가장 핵심이 되는 연관관계 매핑예제 시나리오회원(Member)과 팀(Team)이 존재한다.회원은 하나의 팀에만 소속될 수 있다.회원과 팀은 다대일 관계이다.초기 코드 설계Member 클래스@Entity@Setter@Getterpublic class Member {    @Id @GeneratedValue    @Column(name = "MEMBER_ID")    private Long id;    @Column(name = "USERNAME")    private String username;    @Column(name = "TEAM_ID")    private Long teamId;} Team 클래스@Entity@Getter@Setterpublic class Team {    @Id @Ge..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 5. 엔티티 매핑2 - 기본키 전략

JPA 필드와 컬럼 매핑 상세 옵션과 주의사항1. insertable, updatableinsertable과 updatable 옵션은 엔터티의 필드가 데이터베이스에 어떻게 반영될지를 결정하며, 기본 값은 true로 필드가 기존 DB와 다르거나, 기존에 값을 수정을 막을 수 있다. 예제@Column(insertable = true, updatable = true)private String name;@Column(insertable = true, updatable = false)private String createdAt;@Column(insertable = false, updatable = true)private String updatedAt; name: 삽입과 업데이트가 모두 가능하다. createAt:..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 4. 엔티티 매핑1 - 객체와 테이블 매핑

저번 글에서 언급했듯 JPA에서 가장 중요한 점2023.09.16 - [JPA/ORM 표준 JPA 기본] - [ORM 표준 JPA 프로그래밍] 3. 영속성 관리 - 내부 동작 방식1. 영속성 컨텍스트에서 내부적으로 어떻게 돌아가는지 매커니즘에 대한 이해2. 실제 설계적인 측면(객체와 RDB를 어떻게 매핑해서 사용하는지) 저번 글의 내용을 빌려와 영속성 컨텍스트의 내부 동작 방식중 중요한 것만 간단하게만 설명한다. 자세한 글은 저번 글을 참고하길 바란다.1차 캐시: 영속성 컨텍스트 내부에는 1차 캐시가 있어, 한 트랜잭션 안에서는 같은 엔티티를 반환한다.더티 체킹: 영속 상태의 엔티티의 변경 사항을 자동으로 데이터베이스에 반영한다.쓰기 지연: 트랜잭션을 커밋할 때까지 SQL을 쌓아두고, 한 번에 데이터베이..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 3. 영속성 관리 - 내부 동작 방식

JPA의 핵심: 객체와 DB 매핑과 영속성 컨텍스트들어가기 전에..JPA(Java Persistence API)에서 가장 중요한 두가지 개념1. 객체와 관계형 데이터베이스 매핑: 데이터베이스와 객체 지향 프로그래밍 간의 설계 차이를 어떻게 극복할 것인가? 2. 영속성 컨텍스트: JPA 내부에서 데이터를 어떻게 관리하는가?이 글에서는 이 두 핵심 개념에 대해 자세히 알아보겠다. 객체와 관계형 데이터베이스 매핑 객체와 데이터베이스는 각각의 세계에서 동작하며, 이 둘의 괴리를 해소하는 것이 JPA의 주 목적이다. 이를 위해 저번 글에서 언급했듯이, JPA는 EntityMangerFactory와 EntityManager라는 구성 요소를 제공한다.  EntityMangerFactory: DB 하나당 하나의 Ent..

토이 개발 스토리
'JPA/ORM 표준 JPA' 카테고리의 글 목록