Dev/JPA (26) 썸네일형 리스트형 RS) SQL 중심적인 개발의 문제점 데이터베이스의 세계는 현재 아직 RDB(관계형 디비)가 잡고 있다. 즉 객체를 관계형 디비에 저장해서 관리한다. 문제점은 관계형 디비에 저장하다보니 SQL이 중요한 비중을 차지한다. 수정의 경우에도 SQL 수정을 위주로 해야하며, 모든 SQL을 짜야한다. ex) memberId와 name을 통해 쿼리문을 다 짜여진 상태로 개발이 완료가 되었으나, 이후에 전화번호(tel)를 추가해달라는 요청으로 컬럼도 추가해야하고 본질적인 쿼리문에도 수정작업이 들어가야한다. 이로인해 SQL에 의존적인 개발을 피하기 어렵다는 점이 큰 문제로 작용한다. 패러다임의 불일치 문제 (객체 vs 관계형 데이터베이스) 객체지향이 나온 사상과 관계형 데이터베이스가 나온 사상 자체가 다르다. 관계형 데이터베이스는 데이터를 정규화해서 보관.. JPA의 사용 여기서는 직접 사용해보고 이해한 내용을 중심으로 풀어보고자 한다. 사용 환경 IDE : Intelij DB : h2 database 의존성 관리 : Maven Java 8 1. 라이브러리 추가 (pom.xml) JPA를 사용하려면 위와같은 라이브러리가 필요하다. Maven을 사용하여 자동으로 다운받아지도록 Pom.xml에 추가해주자! JPA의 인터페이스로 하이버네이트를 선택함 내가 사용할 데이터베이스(h2) 여기서 중요한 것은 내가 다운받은 데이터베이스 버전이랑 동일한 버전으로 설정해야한다는 점! 2. JPA 설정하기 (persistence.xml) 어떤거는 javax로 시작하고, 어떤것은 hibernate로 시작하는 설정인데.. 이부분은 쉽게 말해서 앞에서 JPA를 쓰기위해서 사용하는 구현체가 여러개로.. 프록시와 연관관계 관리 프록시와 연관관계 관리(난이도 상) 멤버와 팀과의 관계에서 연관관계가 맺어져 있지만 어떤 경우에는 멤버의 정보와 팀정보를 다 가져오고 다른 경우에는 팀정보가 아닌 멤버의 정보만 가져오고 싶을때 어떻게 해야할까??? // 멤버와 팀을 모두 가져오는 경우 public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); System.out.println("회원 이름: " + member.getUsername()); System.out.println("소속팀: " + team.getName()); } // 멤버만 가져오는 경우 public void p.. JPA 상속관계 매핑 객체는 상속관계를 지원하기 때문에 표현할 수 있는데 테이블 관계에 있어서는 상속을 표현하기 위해서는 여러가지 전략이 있다. 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) ex) InheritanceType.JOINED / 내가 직접 전략을 지정해서 사용할 수 있다. → 어노테이션의 값만 바꿨을 뿐인데 JPA가 이에 맞춰서 알아서 변경해준다. JPA의 장점 중 하나!! JOINED : 조인전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 조인전략(JOINED) : 이 전략이 제일 정석!!! @DiscriminatorColumn(name=“DTYPE”) → 조인전략에서는 어떤 타입인지 알 수 있게 적어.. 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany - 보통 실무에서는 쓰면 안되는 것 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 - 사실 양방향이라기 보다는 용어일 뿐이고 객체입장에서는 방향이 하나인 셈이다. 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야.. 연관관계 매핑 기초 이번 글에서는 연관관계에 대해서 적어보고자 한다. "객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다." - 조영호(객체지향의 사실과 오해) 나중에 경험치가 쌓였을 때 이책을 한번 봐봐야 겠다. 연관관계가 필요한 이유 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. 테이블 관계에서는 TEAM이 1이고 MEMBER가 N으로 1:N 관계이다. 이를 객체 연관관계로 표현하면 외래키(FK)인 TEAM_ID를 teamId로 그대로 표현해서 사용 코드로 표현하자면 아래와 같다.. try{ Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new M.. 엔티티 매핑 이번 글에서는 실제 JPA를 사용해서 테이블과 매핑하는 방법에 대해서 적어볼게요.. 엔티티 매핑 종류 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity - @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. - JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 + 속성 : name JPA에서 사용할 엔티티 이름을 지정 기본값 : 클래스 이름을 그대로 사용(예 : Member) 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. @Table - @Table은 엔티티와 매핑할 테이블 지정 + 속성 : name - 매핑할 테이블 이름 + 속성 : c.. JPA내부 구조(영속성 관리) 이번 글에서는 JPA내부 구조와 영속성 관리에 대해서 끄적여보고자 한다. JPA에서 가장 중요한 2가지 - 객체와 관계형 데이터베이스 매핑하기(어떻게 매핑 할 것인가?) - 영속성 컨텍스트 먼저 위 두가지 경우를 이해하기 위해서는 엔티티 매니저 팩토리와 엔티티 매니저에 대해서 이해가 필요하다. 이 두개에 대해서는 이전 글에서도 언급을 해놨으니 참고하길 바란다. -> 2020/07/01 - [Dev/JPA] - JPA의 사용 1. 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 "엔티티를 영구 저장하는 환경"이라는 뜻 EntityManager.persist(entity); - DB에 저장한다는 것이 아니고 엔티티를 영속성 컨텍스트라는 곳에다가 저장한다는 뜻 - EntityManager 를 통해 영속성.. 이전 1 2 3 4 다음