본문 바로가기

공부/Spring59

[JPA] 연관관계 매핑 기초 1. 단방향 연관관계 Member(N)와 Team(1) 회원 ManyToOne JoinColumn(name = “TEAM_ID”) 2. 양방향 연관관계와 연관관계의 주인 그렇다면, Team에서 Member 호출은? Team에서, List members를 어떻게 호출할 수 있을까. Team에 List members 를 OneToMany로 추가한다. @OneToMany(mappedBy = "team") private List members = new ArrayList(); DB상 테이블은 변하지 않는다. 1. 연관관계의 주인 = 외래키 관리자 주인(N) @JoinColumn(name = "TEAM_ID") : 외래키를 가짐 주인 : ManyToOne, OneToOne 주인X(1) : mappedBy 속성으로.. 2022. 7. 2.
[JPA] 엔티티 매핑 1. 객체와 테이블 매핑 @Entity @Table @Entity : JPA가 관리, 엔티티라 함 주의 기본 생성자 필수 파라미터없음 public protected final 클래스, enum, interface, inner 클래스 사용 불가 저장할 필드에 final 사용불가 (변경가능하기 때문) @Table : 엔티티와 매핑할 테이블 지정 name : 매핑할 이름 catalog : DB 카탈로그 매핑 schema : DB 스키마 매핑 uniqueConstraints(DDL) : DDL 생성시 유니크 제약조건 생성 2. 데이버베이스 스키마 자동생성 DDL을 애플리케이션 실행시점에 자동 생성 테이블중심 → 객체중심! DB 방언(dialect)을 사용해서 DB에 맞는 DDL 생성 persistence.xml.. 2022. 7. 2.
[JPA] 영속성 관리 - 내부 동작 방식 영속성 컨텍스트 엔티티를 영구 저장하는 환경 JPA를 이용하는데 가장 중요한 용어 EntityManager.persist(entity) 영속성 컨텍스트는 논리적인 개념(눈에 보이지 않는다) 엔티티 매니저를 통해 영속성 컨텍스트에 접근 엔티티의 생명주기 비영속 : 영속성 컨텍스트와 전혀 관계없는 새로운 상태 Member member = new Member("member1", "회원1"); 영속 : 영속성 컨텍스트에 관리되는 상태 em.persist(member); 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태 // 회원 엔티티를 영속성 컨텍스트에서 분리 em.detach(member); 삭제 : 삭제된 상태 em.remove(member) 영속성 컨텍스트의 이점 1차 캐시(영속성 컨텍스트라고 이해해.. 2022. 7. 2.
JPA 시작하기 1. HelloJPA 프로젝트 생성 h2 db연결 연결안될 때 : test.mv.db 생성 후 연결 localhost:8082 / jdbc:h2:tcp://localhost/~/test pom.xml 설정 2. Hello JPA - 애플리케이션 개발 JPA의 Persistence 클래스에서 설정정보 조회 → META-INF/persistence.xml 방언(dialect)를 설정할 수 있다. 예를들어, MySql과 Oracle 문법이 다른 부분이 있는데 JPA에서 설정을 통해 해결가능하다. JPA의 Persistence 클래스에서 EntityManagerFactory 생성 EntityManagerFactory : 하나만 생성해서 애플리케이션 전체에서 공유 EntityManagerFactory에서 Enti.. 2022. 6. 20.
JPA 소개 SQL 중심적인 개발의 문제점 1. 무한반복, 지루한 코드 CRUD UPDATE… SELECT… 2. 패러다임의 불일치 객체 VS 관계형 DB 객체 → SQL변환 → SQL → RDB 개발자 = SQL 매퍼 객체와 RDB의 차이 상속 연관관계 데이터 타입 데이터 식별 방법 3. 객체를 테이블에 맞추어 모델링 class Member { String id; Long teamId; // team이 아닌 team_id 사용 String username; } class Team { Lond id; String name; } 4. 엔티티 신뢰 문제 Class MemberService { public void process() { Member member = memberDao.find(memberId); member.. 2022. 6. 20.
[chap17] 프로필과 프로퍼티 프로필 목적 개발목적 설정과 실 서비스 목적의 설정을 구분해서 작성하는 것 개발 중 운영중인 DB에 접근할 수 없다. → 개발용 DB로 접근 실제 서버에 배포하려면 실 서시브 환경에 맞는 JDBC 연결 정보 사용해야함 프로필 사용하기 1-1. @Configuration 에서 프로필 사용 @Profile 설정을 다음과 같이 했다고 가정 로컬 dev @Configuration @Profile("dev") public class DsDevConfig { @Bean(destroyMethod = "close") public DataSource dataSource() { ... } } 실 서비스 real @Configuration @Profile("real") public class DsDevConfig { @Be.. 2022. 6. 9.