🌱 Spring/JPA

본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편)을 강의를 바탕으로 공부하고 정리한 글입니다. 연관 관계 X @Entity public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; @Column(name = "user_name") private String username; @Column(name = "team_id") private Long teamId; } @Entity public class Team { @Id @GeneratedValue @Column(name = "team_id") private Long id; private String name; } 참조 대신에 외래 키를 그대..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. 데이터베이스 스키마 자동 생성 JPA는 객체 매핑만 해놓으면 애플리케이션 실행 시점에 필요 시 테이블을 모두 생성해준다. DDL을 애플리케이션 실행 시점에 자동으로 생성 테이블 중심 → 객체 중심 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL을 생성 이렇게 생성된 DDL은 개발 장비에서만 사용 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용한다. 스키마 속성 옵션 설명 create 기존 테이블 삭제 후 다시 생성 (DROP + CREATE) create-drop create와 같으나 종료 시점에 테이블 DROP update 변경분만 반영 (운영 DB에..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. 엔티티 매핑하기 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 기본 키 매핑 @Id 직접 할당 @GeneratedValue 자동 생성 IDENTITY • 데이터베이스에 위임 • MYSQL에서 사용 SEQUENCE • 데이터베이스 시퀀스 오브젝트 사용 • ORACLE에서 사용 • @SequenceGenerator 필요 TABLE • 키 생성용 테이블 사용 • 모든 DB에서 사용 • @TableGenerator 필요 AUTO • 방언에 따라 자동 지정 • 기본값 IDE..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. 엔티티 매핑하기 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 객체, 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. 주의 기본 생성자가 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스는 안된다. DB에 저장할 필드에는 final 사용하면 안된다. 속성 : name JP..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. JPA에서 가장 중요한 2가지는 다음과 같다. 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) 영속성 컨텍스트 이번 포스팅에서는 그 중 영속성 컨텍스트에 대해 정리해보고자 한다. JPA를 사용하게 되면 EntityManagerFactory, EntityManager에 대해 들어봤을 것이다. EntityManagerFactory를 통해 고객에게 요청이 올 때 마다 EntityManager를 생성한다. 생성된 EntityManager는 내부적으로 데이터베이스 커넥션을 사용해 DB에 접근한다. 이러한 이해를 바탕으로 영속성 컨텍스트가 무엇인지 알아보도록 하자..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. JPQL JPA를 사용하면 엔티티 객체를 중심으로 개발하게 된다. 문제는 검색 쿼리이다. 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요한 것이다. 검색 쿼리를 위해 실제 RDB의 테이블을 대상으로 쿼리를 날리면 특정 DB에 종속적인 설계가 된다. 따라서 JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다. JPQL은 엔티티 객체를 대상으로 쿼리를 날릴 수 있다. SQL 문법과 유사하며 SELECT, FROM, W..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. JPA 사용 이전의 문제점 SQL 중심적인 개발의 문제 객체를 보관해야 할 때 관계형 데이터베이스를 주로 사용한다. 객체를 만들고 그것을 데이터베이스에 저장하기 위해서는 관계형 데이터 베이스가 알아들을 수 있는 수 많은 SQL문을 작성해야할 것이다. 여기서 SQL 중심적인 개발이 된다는 점이 문제다. CRUD에 관한 SQL을 무한 반복으로 짜야하기 때문에 굉장히 지루한 개발이 된다. 만약 수정사항이라도 생긴다면, SQL문을 모두 뜯어 고쳐야 한다. 수 많은 SQL문을 수정하는 과정에서 오타나 데이터를 빼먹는 일은 다반사일 것이다...^^ 결국 관계형 데이터베이스를 상황에서는 SQL에 의존적..
JPA에서 엔티티를 변경하기 위해서 변경감지와 병합이라는 기능을 사용하는데, 이번 포스팅에서는 이 변경감지와 병합을 어떻게 사용하는지 알아보도록 하겠다. 변경감지와 병합을 알기 앞서 우선 준영속 엔티티가 무엇인지 이해할 필요가 있다. 준영속 엔티티 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. 임의로 만들어낸 엔티티도 기존에 DB에 한번 저장되어 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다. 이러한 준영속 엔티티를 수정할 때 변경 감지와 병합이 사용된다. 그럼 이제 변경감지와 병합에 대해 알아보도록하자. 준영속 엔티티 수정 방법 변경 감지(dirty checking) 사용 병합(merge) 사용 변경 감지 (Dirty Checking) @Transactional void update(It..
an2z
'🌱 Spring/JPA' 카테고리의 글 목록 (3 Page)