Spring/JPA(11)
-
[Spring JPA] 다양한 연관관계 매핑
다양한 연관관계 매핑 다대일[N:1] 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향 개념 x 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체 양방향 관계는 A->B , B->A 처럼 참조가 2군데 연관관계의 주인: 외래 키를 관리하는 참조 주인의 반대편: 외래 키에 영향을 주지 않는다. (단순 조회만) 다대일 단방향 Member.java @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; 다대일 양방향 Team.java @OneToMany(mappedBy = "team") private List perso..
2021.04.19 -
Spring JPA 영속성 컨텍스트
영속성 컨텍스트 엔티티 매니저 팩토리와 엔티티 매니저 영속성 컨텍스트란?? JPA를 이해하는데 가장 중요한 언어 "엔티티를 영구 저장하는 환경" 이라는 뜻 EntityManager.persist(entity); 엔티티 매니저? vs 영속성 컨텍스트? 영속성 컨텍스트는 논리적인 개념 눈에 보이지 않는다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 J2SE 환경 엔티티 매니저와 영속성 컨텍스트가 1:1 PersistenceContext는 눈에 보이지 않는 공간이라고 생각하면 된다. 엔티티 생명주기 비영속 객체를 생성한 상태(비영속) Member member = new Member(); member.setId(1L); member.setUserName("User1") 영속 //객체를 생성한 상태(비영속) ..
2021.02.28 -
Spring JPA 엔티티 맵핑
엔티티 매핑 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의 기본 생성자 필수 (파라미터가 없는 public or protected생성자) final 클래스, enum, interface, inner 클래스 사용 x 저장할 필드에 final 사용 x @Table 엔티티와 매핑할 테이블 지정 속성 기능 기본값 name 매핑할 테이블 이름 엔티티 이름을 사용 catalog 데이터베이스 catalog 매핑 schema 데이터베이스 schema 매핑 uniqueConstraints(DDL) DDL 생성 시에 유니크 제약 조건 생성 데이터베이스 스키마 자동 생성 hibernate.hbm2ddl.au..
2021.02.27 -
JPA 개발 들어가기
JPA 들어가기 라이브러리 추가 - pom.xml Spring Boot에서는 자동으로 다 해준다! 하지만 지금 프로젝트에서는 한땀한땀 다 해보는게 중점이어서 xml파일도 작성해보는거기 때문에 이점을 주의하자!! org.hibernate hibernate-entitymanager 5.4.1.Final javax.xml.bind jaxb-api 2.3.1 com.h2database h2 1.4.200 이렇게 JPA 관련 라이브러리와 H2데이터 베이스 라이브러리를 넣어준다. 여기서 javax.xml.bind 라는 라이브러리는 jdk11버전으로 프로젝트를 실행시 일어나는 Java EE 모듈과 CORBA 모듈이 Deprecated되면서 기본 참조가 되지 않아 발생한 문제였다.(출처: https://luvstudy..
2021.02.19 -
JPA는 왜 사용하는가?
JPA는 왜 사용하는가? 만약 JPA를 사용을 하지 않는다면 만약 (객체지향 언어를 사용한다고 하면) SQL를 객체답게 모델링 할 수록 매핑잡업만 늘어나게 된다. 예를 들면... CRUD 작업을 모든걸 계속해서 해줘야하는 듯한...? SQL 중심적인 개발에서 객체 중심으로 개발 생산성, 유지보수, 패러다임의 불일치 해결, 성능 데이터 접근 추상화와 벤더 독립성 표준 생산성 - JPA와 CRUD 저장 : jpa.persist(member); 조회 : Member member = jpa.find(memberId); 수정 : member.setName("변경할 이름"); 삭제 : jpa.remove(member); 유지보수 기존 : 필드 변경시 모든 SQL 수정 JPA와 패러다임의 불일치해결 저장 개발자가 할..
2021.02.19