목록Tech/JPA (16)
지나공 : 지식을 나누는 공간
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b2TXlH/btqLkKkdhof/ALvUfmGItqTk3PXYuwAwn1/img.png)
이번 포스팅에서 공부할 것은, 프록시 들어가기 프록시의 개념과 특징 프록시 확인하기 즉시로딩(EAGER)과 지연로딩(LAZY) N+1의 문제 들어가기 Team 과 Member가 1:N으로 매핑될 때를 생각해보자. member를 가져올 때 연관관계가 있다고 해서 항상 team도 가져온다면, 최적화가 되지 않은 상황이 될 것이다. 하지만 언젠가 member를 가져오면서 그 멤버가 속한 team의 정보도 사용해야 할 때도 있을 것이다. 이 경우에는 한 번에 둘 다 가져와야 하고, 또 가져오려니 항상 가져오면 낭비가 심하고. 이 부분에 대한 JPA의 해결을 오늘 공부할 예정이다. 프록시란? 먼저, em.find() vs em.getReference() 에 대하여 find()는 데이터베이스를 통해 실제 엔티티를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/RZMLT/btqKPVmPUI1/RJTTCSoo6fbqz3TEg0w3w1/img.png)
필수 어노테이션정리 @Entity -> JPA를 사용해서 데이터베이스의 테이블과 매핑할 클래스에 필수로 명시해야 하는 어노테이션 제약사항 1. 파라미터가 없는 protected나 public의 기본생성자가 필수로 있어야 함 (Entity를 JpaRepository에서 가져올 때 기본생성자를 사용하므로) 2. 필드에 final 클래스, enum, interface, inner 클래스를 사용할 수 없음 속성 name : 엔티티 이름을 지정하는 속성, 기본값은 클래스이름 @Table -> 해당 엔티티와 매핑할 테이블을 지정하는 어노테이션 속성 name : 매핑할 테이블 이름을 지정, 기본값은 엔티티 이름 (아래 사진에서 ORDERS라고 지정했지만 안 써도 테이블명이 ORDERS다.) catalog : 데이터베..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cawRNV/btqKmobgZyD/ozxmp09HJfMPksEdpmqh01/img.png)
JPA의 기능에는 데이터베이스 스키마 자동생성 기능이 있다. 이는 DDL을 어플리케이션 실행 시점에 자동으로 생성해주는 기능이다. 테이블 중심에서 객체 중심으로 코딩이 가능하게 하는 기능이고, 데이터베이스 dialect에 따라 적절하게 DDL을 생성한다. 예를 들어 MySql이냐 Oracle이냐에 따라 varchar인지 varchar2인지가 달라진다. dialect에 따라 맞게 DDL을 생성한다. 그리고 이렇게 생성된 DDL은 개발 장비에서만 사용하고, 운영 서버에서는 사용하지 않거나 적절히 다듬어 쓴다. 사용법은 resources - META-INF - persistence.xml에서 hibernate.hbm2ddl.auto의 옵션을 설정하면 된다. - create : 기존 테이블을 삭제한 뒤 다시 생..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cR36mB/btqIl8ifgSO/FAfSmjDc9CmYa5SGNWnHa1/img.png)
김영한 님의 자바 ORM 표준 JPA 프로그래밍 강의를 듣고 정리했습니다. JPA에서 가장 중요한 것이 '객체와 관계형 데이터베이스 매핑하는 것', 그리고 영속성 컨텍스트입니다. 영속성 컨텍스트를 알아기 전에 먼저 짚어야 할 개념들이 있습니다. EntityManagerFactory, EntityManager ? 데이터 요청이 들어올 때마다 EntityManagerFactory는 EntityManager를 생성하고, 이 EntityManager는 데이터베이스커넥션을 활용해서 DB에 접근하여 요청사항을 처리합니다. EntityManager 사용 EntityManager를 사용해 봅시다. resources 폴더 안에 있는 persistence.xml 파일에서 persistence-unit name은 JPA를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cvwyBX/btqKjbDJvXw/ImANh3bCyuseAbVyyIRVRk/img.png)
JPA란? - Java Persistence API, 자바 진영의 ORM 기술 표준 - 인터페이스의 모음으로 Hibernate, EclipseLink, DataNucleus의 구현체 ORM이란? Object-relational mapping, 객체 관계 매핑으로, 객체는 객체대로 설계하고 관계형데이터베이스는 관계형데이터베이스로 설계하면 orm 프레임워크가 중간에서 매핑하는 방식임. JPA와 CRUD - 마치 java 컬렉션에 넣은 채 쓰는 듯한 편리함! - 저장 : jpa.persist(member) //영구저장한다는 의미 - 조회 : Member member = jpa.find(memberId) - 수정 : member.setName("변경할 이름") - 삭제 : jpa.remove(member) 패러..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/djEuXZ/btqIhrAUx7F/tYnEB3pJgmGW7vK2dElUk0/img.png)
김영한 님의 자바 orm 표준 jpa 프로그래밍 기본편 강의를 통해 공부한 내용입니다. ORM이란, Object(객체)와 Relation(관계)를 Mapping(연결)한다는 개념으로, ORM을 이용한 개발은 객체와 데이터베이스 변형에 유연하게 대처할 수 있도록 한다. 객체 지향 프로그래밍 입장에서 관계형 데이터베이스의 제약을 받지 않으면서 관계형 데이터베이스 자체를 객체처럼 쉽게 표현하고 사용하기 위한 개념이다. SQL 중심적인 개발의 문제점 : CRUD 의 무한한 반복으로 지루한 코드 생성 객체와 관계형 데이터베이스의 차이 : 상속, 연관관계, 데이터타입, 데이터 식별 방법 -> 객체는 FK로 참조가 불가능하지만 테이블은 연관관계를 통해 참조가 가능하다. [jpa없이 java에서 sql을 직접 다루면 ..