본문 바로가기

강의 정리28

3. 엔티티 매핑 1. 객체와 테이블 매핑 @Entity JPA 가 관리하는 객체이며, 데이터베이스 테이블과 매핑해서 사용한다. 기본 생성자 필수 (public / protected) final 클래스, enum, interface, inner 클래스 사용은 안된다. 저장할 필드에 final 사용은 안된다. 속성 name JPA에서 사용할 엔티티 이름 default 는 객체 명 @Table 속성 name 데이터베이스 테이블에 대한 이름을 지정한다. uniqueConstraints 유니크 제약조건을 부여한다. 2. 데이터베이스 스키마 자동 생성 옵션 hibernate.hbm2ddl.auto create : 시작 시점에 drop create-drop : 종료 시점에 drop update : 변경 부분만 반영 (컬럼을 추가하는.. 2020. 12. 27.
2. 영속성 관리 1. 엔티티 매니저 팩토리와 엔티티 매니저 DB 하나당 하나의 EntityManager Factory 가 있으며, EntityManager 을 요청마다 생성해 Connection pool 에 있는 커넥션을 사용하여 DB 에 접근하여 데이터를 CRUD 한다. 2. 영속성 컨텍스트 엔터티를 영구 저장하는 환경이라는 뜻이다. 영속성 컨텍스트는 엔터티 매니저를 통해 접근할 수 있다. 엔터티의 생명 주기 비영속 (new / transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 ex) new Member(); 영속 (managed) 영속성 컨텍스트에 관리되는 상태 ex) entitymanager.persist(member); ex) entitymanager.find(Member.class, "id").. 2020. 12. 26.
1. JPA 시작하기 1. hibernate.dialect JPA는 특정 데이터베이스에 종속되지 않는다. 각 데이터베이스의 SQL 문법과 함수는 조금씩 다르다. MySQL : VARCHAR Oracle : VARCHAR2 해당 설정을 통해서 JPA 가 어느 데이터베이스에 종속되지 않도록 설정할 수 있다. 현재 강의에서는 h2를 메인으로 사용하기 때문에 org.hibernate.dialect.H2Dialect 로 진행한다. 2. JPA 구동 방식 JPA 에는 Persistence 라는 클래스가 존재한다. META-INF/persistence.xml 을 읽어서 설정 정보를 조회한다. 읽은 정보를 기반으로 EntityManagerFactory를 생성한다. 이를 기반으로 EntityManager을 생성해서 사용한다. JPA 의 모든.. 2020. 12. 26.
2. 엔터티 설계시 주의점 1. 엔터티 설계에서는 가급적 Setter를 사용하지 않는다. 2. 모든 연관관계는 Lazy로 세팅한다. Eager로 많이엮여있으면 하나를 가져올 때 모두를 가져오는 문제가 생길 수 있다. Lazy + [fetch join/entity graph] 을 사용해라 특히 JPQL을 사용할 때 N+1 문제가 자주 발생한다. @XToOne(OneToOne, ManyToOne) 은 기본 전략이 Eager이므로 꼭 Lazy로 설정해야한다. 3. 컬렉션은 필드에서 초기화해라 4. 하이버네이트 테이블, 컬럼명 생성 전략 (SpringPhysicalNamingStrategy) camelCase -> underscore 점(dot) -> underscore 대문자 -> 소문자 5. Cascade 2020. 12. 26.