어느 날, 술마시면서 JPA에 대해 얘기하는 도중 들어온 질문 > JPA는 알겠는데 근데 그럼 Hibernate는 뭐야? 같은건가? ORM은? 차이가 뭐야? 그 질문에 아무도 명쾌하게 설명하지 못하고 다른 얘기로 넘어갔다는 이야기🙃 JPA 개념알
영속성 컨텍스트를 보기 전 알아야할 개념들이 있다.위의 이미지를 보면 알다시피, 그동안 conn을 직접 관리하던 것을 EntityManager가 대신 해주는 것을 알 수 있다.이 EntityManager는 EntityManagerFactory에서 생성을 해주며, 사용자
그러면 영속성 컨텍스트를 왜 사용할까? 영속성 컨텍스트를 사용함으로써 얻을 수 있는 이점을 알아보자영속성 컨텍스트 내부에는 위와 같이 1차 캐시라는 공간이 있다.persist()를 한다고 해서 바로 DB에 insert문이 날아가는게 아닌, 해당 1차 캐시 공간에 저장된
영속성 컨텍스트에는 총 4가지의 LifeCycle이 존재한다.영속성 컨텍스트와 상관 없는 상태JPA와 상관없이 객체만 생성한 상태를 말한다.ex)영속성 컨텍스트에 관리되고 있는 상태객체 생성한다음 persist() 하는 순간 영속상태가 된다.commit하는 시점에 영
테이블과 매핑할 클래스 상단에 필요JPA에서 관리할 엔티티라는 것을 명시 주의사항기본 생성자는 필수final class, enum, interface, inner class에는 사용 불가저장할 필드에 final 사용 불가ex)엔티티와 매핑할 테이블 지정생략 시, cla
연관관계에 들어가기 전에 간단한 키워드들이 있어 정리하고 들어가보려 한다.방향 : 단방향/양방향이 있다. 연관관계가 형성되어있을 때, 한쪽만 참조하는 것을 단방향, 양쪽 모두 서로 참조하는 것을 양방향이라 칭한다.다중성 : 다대일/일대다/일대일/다대다 다중성이 있다.연
관계형 데이터베이스에서는 객체 지향에서 사용되는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계라는 모델링 기업이 존재하는데 이 기법이 그나마 상속 개념과 흡사하다. 이를 이용하여 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것을 상속
JPA는 영속성 컨텍스트에 엔티티를 보관 시, 식별자를 사용하고 이를 구분하기 위해 equals와 hashcode를 사용해 비교한다. 이때 식별자가 2개 이상이면 별도의 식별자 클래스를 만들고 그곳에 equals와 hashcode를 구현해야한다. JPA는 2가지 방
연관관계가 존재하는 엔티티는 조회할 때마다 값을 모두 들고 와야할까?필요 값들에 대해서만 값을 조회한 뒤, 연관된 엔티티를 사용하려 할 때, 다시 값을 조회한다면 충분히 효율적일 것이다. 이같은 방법을 JPA에서는 지연로딩이라 칭한다.이 지연로딩을 사용하기 위해,
Embedded Type은 응집도를 높히기 위해 자바 기본값 타입들을 한데 묶어 사용자가 임의로 생성한 Type을 말한다.Member.class Member Entity에 주소 관련 컬럼이 위와 같이 정의되어있을 떄, Member가 주소관련 세부 상세 데이터들을
JPA는 공식적으로 지원하는 객체지향 쿼리 기능이 존재한다.JPQLCriteria 쿼리 : JPQL을 편하게 작성하도록 도와주는 API, 빌더 클래스 모음네이티브 SQL : JPA에서 JPQL 대신 직접 SQL 사용 가능공식적이진 않지만 알아둬야할 기능QueryDSL
QueryDSL을 사용하면 문법 오류를 컴파일 단계에서 잡을 수 있고 문자 기반의 JPQL보다 동적 쿼리를 안전하게 생성할 수 있는 장점이 있다. ex)결과 조회보통 uniqueResult()나 list()를 사용한다.uniqueResult() : 조회 결과가 한 건일