[JPA 활용 1] JPA와 DB 설정, 동작확인

강신현·2022년 6월 27일
0
post-thumbnail

✅ ddl-auto: create

코드

- Member

package jpabook.jpashop;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@Getter
@Setter
public class Member {
    @Id
    @GeneratedValue

    private Long id;
    private String username;
}

- MemberRepository

package jpabook.jpashop;

import org.springframework.stereotype.Repository;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Repository
public class MemberRepository {

    @PersistenceContext // EntityManager 을 자동으로 주입해줌
    EntityManager em;

    public Long save(Member member){
        em.persist(member);
        return member.getId();
    }

    public Member find(Long id){
        return em.find(Member.class, id);
    }
}

jpa CRUD 명령어

  1. jpa.persist(member);
  2. Member member = jpa.find(memberId);
  3. member.setName("변경할 이름");
  4. jpa.remove(member);

엔티티 매니저 공장 -> 엔티티 매니저를 만들고 -> 엔티티매니저가 위에 jpa CRUD 기능을 담고 있다고 보면 된다.

- application.yml

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/jpashop
    username: sa
    password:
    driver-class-name: org.h2.Driver

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        #show_sql: true ym
        format_sql: true

logging.level:
  org.hibernate.SQL: debug
  org.hibernate.type: trace #쿼리 파라미터 로그 남기기

ddl-auto (주의🔥)

  • create: 기존테이블 삭제 후 다시 생성 (DROP + CREATE)
  • create-drop: create와 같으나 종료시점에 테이블 DROP
  • update: 변경분만 반영(운영DB에서는 사용하면 안됨)
  • validate: 엔티티와 테이블이 정상 매핑되었는지만 확인
  • none: 사용하지 않음(사실상 없는 값이지만 관례상 none이라고 한다.)

주의할 점

  • 운영 장비에서는 절대 crate, create-drop, update 사용하면 안된다.
  • 개발 초기 단계는 create 또는 update
  • 테스트 서버는 update 또는 validate
  • 스테이징과 운영 서버는 validate 또는 none

결론 : spring.jpa.hibernate.ddl-auto: create 옵션은 🔥로컬환경에서만 사용🔥해야 된다
-> 로컬 환경을 제외한 나머지 서버에서는 최대한 직접 쿼리를 날려서 적용하는 것이 가장 좋다.

db 반영 모습

trouble shooting

test가 안됨..
-> Intellij 설정에서 Run tests using 옵션을 Gradle이 아닌 IntelliJ IDEA로 해줘야 함.

profile
땅콩의 모험 (server)

0개의 댓글