JPA 14

mappedBy

객체와 테이블이 관계를 맺는 차이 객체 연관관계 = 2개 회원 -> 팀 연관관계 1개(단방향) 회원에 팀의 참조값을 넣어두어야함 팀 -> 회원 연관관계 1개(단방향) 팀에 회원의 참조값을 넣어두어야함 객체의 양방향 관계는 사실상 양방향이아니라 단방향 관계 2개이다. 근데 억지로 양방향이라고 부르는거 테이블 연관관계 = 1개 회원 팀의 연관관계 1개 (양방향) pk와 fk로 서로 왔다갔다 할 수 있음. 둘 중 하나로 외래 키를 관리 해야 한다. 양방향 매핑 규칙 객체의 두 관계중 하나를 연관관계의 주인으로 지정 (Member에 있는 team이 주인이 될건지 Team에 있는 members가 될건지 정해야함) 연관관계의 주인만 외래키를 관리(등록, 수정) 만약 members가 주인이 아니라면 members에 ..

JPA 2022.10.18

IDENTITY전략

IDENTITY전략 - 특징 기본키 생성을 데이터베이스에 위임 주로 MYSQL, PostgreSQL, SQL Server, DB2에서 사용 (예: MySQL의 auto_increment) jpa는 보통 트랜잭션 커밋 시점에 insert쿼리를 실행한 이후에 id값을 알 수 있다. IDENTITY전략은 em.persist()시점에 즉시 insert쿼리를 실행하고 db에서 식별자를 조회한다. 전 블로그에 적었던 한번에 모아서 insert를 하는게 IDENTITY전략에서는 불가능 하다. @GeneratedValue(strategy = GenerationType.IDENTITY) 설정해주고 final Member member = new Member(); member.setUsername("B"); System.o..

JPA 2022.10.17

영속 컨텍스트

엔티티 매니저를 통해 영속성 컨텍스트(엔티티를 영구 저장하는 환경)에 접근한다. EntityManager.persist(member); 를 해주면 영속 상태가 된다. 비영속은 객체를 생성한 상태(영속되기 전) Member member = new Member(200L, "member200"); 준영속은 영속성 컨텍스트에 저장되었다가 분리된 상태. em.detach(member);// 회원 엔티티를 영속성컨텍스트에서 분리, 준영속상태이다. em.remove(member);// 객제를 삭제한 상태(삭제) 영속 컨텍스트란 Member member1 = new Member(150L, "A"); Member member2 = new Member(160L, "B"); em.persist(member1); em.per..

JPA 2022.10.15

JPA 준비

라이브러리 추가 org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.199 DB는 H2를 사용 JPA설정파일인 persistence.xml을 만들어준다. 경로는 resource/META-INF/persistence.xml property속성에 보면 dialect가 있는데 이건 데이터베이스 방언이라는 것으로 각 db마다 제공하는 sql문법과 함수가 조금씩 다르기 때문에 사용할 db를 value로 지정해주면 거기에 맞게 지원이 된다. 참고로 하이버네이트는 40가지 이상 db방언을 지원해 준다고 한다. 다음은 구동 방식이다. 위에서 설정해준 persistence.xml을 읽어와서 Persistence로 EntityManagerFac..

JPA 2022.10.14