목록JPA (52)
BE전문가 프로젝트
JPA는 Application 로딩 시점에 DB Table 생성하는 기능도 지원한다. DDL을 애플리케이션 실행 시점에 자동 생성 테이블 중심 -> 객체 중심 DB 방언을 활용해서 DB에 맞는 적절한 DDL 생성 이렇게 생성된 DDL은 운영이 아닌 개발 단계에서만 사용해야한다 사용법 persistence.xml에 위에 옵션을 추가해준다. 데이터베이스 스키마 자동 생성 - 속성 옵션 설명 create 기존테이블 삭제 후 다시 생성(Drop + create) create-drop create와 같으나 종료시점에 테이블 Drop(테스트코드 실행할 때 주로 사용) update 변경분만 반영(운영 DB에는 사용하면 안됨) - 추가만 가능! validate 엔티티와 테이블이 정상 매핑되어있는지만 확인 none 사용..
엔티티 매핑 소개 엔티티 매핑 객체와 테이블 매핑 @Entity, @Table 필드와 컬럼 매핑 @Column 기본 키 매핑 @Id 연관관계 매핑 @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의 기본 생성자 필수(파라미터가 없는 public 또는 protexted 생성자) final클래스. enum, interface, inner 클래스 사용x 저장할 필드에 final사용 x @Table 속성 속성 기능 기본값 name 매핑할 테이블 이름 catalog DB catalog 매핑 schema DB 스키마 매핑 uniqueConstraints DDL ..
영속(1차 캐시에 있는 상태) - > 준영속상태 영속 상태의 엔티티가 영속 컨텍스트에서 분리(detached) 영속성 컨텍스트가 제공하는 기능을 사용하지 못한다. 준영속 상태로 만드는 방법 준영속 상태를 만드는 방법 em.detach(entity) 특정 엔티티만 준영속 상태로 전환 em.clear() 영속성 컨텍스트를 완전히 초기화 em.close 영속성 컨텍스트를 종료
플러시 영속성 컨텍스트의 변경내용을 DB에 반영하는 것 - 영속성 컨텍스트의 변경사항과 DB의 데이터를 맞춰주는 것 플러시 발생 변경 감지 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송 영속성 컨텍스트를 플러시 하는 방법 직접 사용하는 일은 적지만 알아두는 것이 좋다 em.flush() - 직접 호출(commit하기 전에 SQL문을 사용하고 싶을 때 사용 - 강제성을 띈다) 트랜잭션 커밋 - 플러시 자동 호출 JPQL 쿼리 실행 - 플러시 자동 호출 정리 플러시를 한다고해서 영속성 컨텍스트를 비우지는 않는다. 영속성 컨텍스트의 변경 내용을 DB에 동기화하는 것이다. 트랜잭션이라는 작업 단위가 중요하며 커밋 직전에만 동기화 하면 된다.
JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 영속성 컨텍스트 EntityManager Factory에서 고객의 요청이 올 때 마다 EntityManager를 생성한다. 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 Entity를 영구 저장하는 환경이라는 뜻 EntityManager.persist(entity) - entity 컨텍스트를 통해 entity를 영속화 한다는 의미 영속성 컨텍스트는 논리적인 개념 엔티티 매니저를 통해 영속성 컨텍스트에 접근 EntityManager안에 눈에 보이지않는 컨텍스트가 생성된다. 엔티티의 생명주기 엔티티의 생명주기 비영속 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 영속성 컨텍스트에 관리되는 상태 준영속 영속성 컨텍스트에 저장되었다..
JPA 작동원리 1. jpa는 persistence라는 클래스에서 시작한다. 2. META-INF/persistence.xml에서 설정정보를 읽는다. 3. entity ManagerFactory라는 클래스를 만든다. 4. 필요할 때 마다 EntityManager에서 필요할 때 마다 찍어낸 후 돌린다. Entity만들기(Member.class) package hellojpa; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class Member { @Id private Long id; private String name; public Long getId() { return id; } public String getN..
1. Hibernate 라이브러리 추가 - 하이버네이트를 추가해주는데 여기서 스프링 버전에 맞게 선택해주는 것이 가장 이상적이다. - 스프링부트 홈페이지에 Reference를 가서 orf.hibernate를 ctrl+f 하여 찾아보면 지금 버전에 맞는 하이버네이트 버전을 알 수 있다. 라이브러리에서 보면 javax.persistence를 찾아볼 수 있다. JPA는 인터페이스인데 인터페이스 구현체로 하이버네이트를 선택했다는 것을 알 수 있다. 1.1 could not find artifact org.springframework 오류 스프링부트 프로젝트 생성하였는데 오류가 발생(위에 오류메시지) 기존에 존재하던 Library 오류가 원인 가능성 높다. 해결방법 사용자/내폴더/.m2안에 있는 repositor..
JPA -Java Persistence API - 자바 진영의 *ORM 기술표준 *ORM - Object-relational mapping(객체 관계 매핑) - 객체는 객체대로 설계 - 관계형 데이터베이스는 관계형 데이터베이스대로 설계 - ORM 프레임워크가 중간에서 매핑 = 대중적인 언어에는 대부분ORM 기술이 존재(type script, python 등) JPA는 애플리케이션과 JDBC 사이에서 동작함 개발자가 직접 JDBC API를 사용하는 것이 아닌 JPA에게 명령하면 API를 사용하하도록 함 JPA 동작(저장) 적절한 sql문을 만들어 jdbc API를 통해 db로 보냄 JPA는 표준 명세 - jpa는 인터페이스의 모음 - jpa 2.1 표준 명세를 구현한 3가지 구현체(하이버네이트, Eclip..