각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다른데,이 때 SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능을 데이터베이스 방언이라고 한다. JPA는 특정 데이터베이스에 종속되지 않으며, 지정한 데이터베이스에 맞게 SQL문을 생성한다. JPQL
transaction을 commit하면 현재 entity와 1차 캐시에 entity가 저장된 최초의 시점이 저장된 snapshot을 비교한다. entity에 변화가 있을 경우 UPDATE SQL을 생성하여 쓰기 지연 SQL 저장소에 저장하고, 데이터베이스에 SQL문들을
기본 키 생성을 데이터베이스에 위임한다(ex) MYSQL의 AUTO_INCREMENT). JPA는 보통 트랜잭션 커밋 시점에 한꺼번에 INSERT SQL을 실행한다. AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있기
양방향 매핑은 반대 방향으로 조회하는 기능이 추가된 것일 뿐이므로 단방향 매핑만으로도 연관관계 매핑을 할 수 있다. 그러나 개발하면서 JPQL에서 역방향으로 탐색할 일이 많기 때문에 양방향 매핑이 필요한 상황들이 있다. 양방향 매핑은 테이블에 영향을 주지 않으므로 초기
일대일 관계는 그 반대도 일대일 관계이다. 주 테이블과 대상 테이블 중에 외래키 선택을 할 수 있다. 외래키에는 데이터베이스 UNIQUE 제약조건이 필요하다. 일대일 단방향 매핑은 다대일 단반향 매핑과 유사하다. 일대일 양방향 매핑도 역시 다대일
관계형 데이터베이스는 상속 관계가 없다. 대신 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 따라서 상속관계 매핑은 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑한다.
em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회하이버네이트의 내부 라이브러리를 통해 실제 클래스를 상속 받아서 만들어진다.실제 클래스와 겉 모양이 같다.사용하
객체 타입의 한계 항상 값을 복사해서 사용하면 공유 참조로 인해 발생하는 부작용을 피할 수 있다. 자바 기본 타입에 값을 대입하면 자동으로 값을 복사하지만, 임베디드 타입과 같은 객체 타입은 참조 값을 직접 대입하는 것을 막을 방법이 없다.
프로젝트를 진행하면서 지정한 데이터들을 한꺼번에 삭제해야 하는 기능을 구현해야 했다. 처음에는 deleteAllByXXX()을 사용하려고 했으나, 데이터들을 삭제하기 위해서 DELETE 쿼리를 수십개 날리는 것을 발견했다.