** 주의 : 운영에선 사용하면 안된다. - DDL을 애플리케이션 실행 시점에 자동 생성 - 테이블 중싱 - > 객체 중심 - 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성 - 이렇게 생성된 DDL은 개발 장비에서만 사용 - 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용 persistence.xml 안에 다음 내용을 추가한다. 기동 시에 로그확인 (현재 member 클래스만 있다) Hibernate: drop table member if exists Hibernate: create table member ( id bigint not null, name varchar(255), primary key (id) ) drop을 날린 후 create가 된다. - hi..
- 객체와 테이블 매핑 : @Entity, @Table - 필드와 컬럼 매핑 : @Column - 기본 키 매핑 : @Id - 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity - @Entity가 붙은 클래스는 jpa가 관리, 엔티티라 한다. - JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 - 주의 ㄴ 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) ㄴ final 클래스, enu,, interface, inner 클래스 사용 x ㄴ 저장할 필드에 final 사용 x @Entity 속성 - name ㄴ JPA에서 사용할 엔티티 이름을 지정한다. ㄴ 기본값 : 클래스 이름을 그대로 사용 (예: Member) ㄴ 같은 클래스 이름이 없으..
준영속 상태 - 영속 -> 준영속 - 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached) - 영속성 컨텍스트가 제공하는 기능을 사용 못함 Member member = entityManager.find(Member.class, 150L); member.setName("adfadaf"); entityManager.detach(member); //영속성 컨텐츠에서 제외 시켜버린다. 그러므로 커밋시점에 아무 일도 일어나지 않는다. ts.commit(); 이렇게 사용하면 detach에서 영속 컨텍스트에서 제외시켜버린다. 영속 상태였다가 영속 상태에서 빠지면 준영속 상태라 말한다. - em.detach(entity) : 특정 엔티티만 준영속 상태로 전환 - em.clear() : 영속성 컨텍스트를 완전..
플러시 - 영속성 컨텍스트의 변경내용을 데이터베이스에 반영 플러시 발생 - 변경 감지 - 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 - 쓰기지연SQL저장소의 쿼리를 데이터베이스에 전송(등록,수정,삭제 쿼리) 영속성 컨텍스트를 플러시 하는 방법 - em.flush() 직접호출 - 트랜잭션 커밋 - 플러시 자동 호출 - JPQL 쿼리 실행 - 플러시 자동 호출 만약 아래와 같이 flust()를 직접 호출할 경우 Member member = new Member(200L, "member200"); entityManager.persist(member); entityManager.flush();//즉시 디비에 쿼리를 날린다. System.out.println("======"); ts.commit(); Hiber..
쓰기 지연 SQL 저장소 - persist()를 사용했을 때 1차캐시에만 저장되는 것이 아니라, insertSql의 경우 "쓰기지연SQL저장소"에 저장 된다. 커밋 시점에 db에 보낸다. persistence.xml에서 관리 할 수도 있음 Member member1 = new Member(150L, "a"); Member member2 = new Member(160L, "b"); entityManager.persist(member1); entityManager.persist(member2); System.out.println("=======쓰기 지연 sql 저장소 이후======"); ts.commit(); 이런 것을 잘 사용하면 성능을 잘 먹고 사용할 수 있다.
EntityManager.persist(entity)는 사실 db에 저장하는게 아니라, entity를 영속성 컨텍스트라는 곳에 저장한다는 것이다. 엔티티매니저? 영속성 컨텍스트? - 영속성 컨텍스트는 논리적인 개념 - 눈에 보이지 않는다. - 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 J2SE 환경 엔티티매니저와 영속성 컨텍스트가 1:1 (엔티티매니저를 생성하면 영속성 컨텍스트가 1:1로 생성된다.) ex) EntityManager -> 1:1 PersistenceContext (눈에 보이지 않는 공간) 엔티티 조회, 1차캐시 1. 만약 find를 이용해 조회를 한다면 jpa는 1차 캐시를 먼저 찾는다. @Id값이 키값이 되고 entity는 객체 자체가 된다. db를 먼저 찾는 것이 아니다. 2. 만..
- 비영속 (new/transient) ㄴ 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); - 영속(managed) (persistence) 같은 느낌 ㄴ 영속성 컨텍스트에 관리되는 상태 //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); //객체를 저장한 상태(영속) e..
package helloJpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import java.util.List; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");// 유닛네임을 넣어주면 된다. EntityManager entityManager = e..
- Total
- Today
- Yesterday
- Intercepter
- 로그인
- JPA
- rejectValue
- SpringBoot
- 스프링공부
- 리터럴
- ArgumentResolver
- jpa api
- 인터셉터
- 향해99
- HTTP
- BindingResult
- 예외처리
- exception
- 항해플러스
- 향해플러스
- 컨트
- React
- hypertexttransferprotocol
- 백엔드 개발자 공부
- reject
- thymleaf
- 향해플러스백엔드
- 백엔드 개발자 역량
- 항해99
- filter
- Java
- react실행
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |