JPA는 여러가지 Exception을 제공한다. 그리고 해당 Exception은 PersistenceException을 상속하기 때문에 모두 PersistenceException의 자식이다. 참고로 PersistenceException은 RuntimeException을 상속하여 정의되었다. Persistence Exception 과 Transaction JPA Exception은 크게 두가지로 나뉠 수 있다. 트랜잭션의 롤백을 표시하는 Exception 트랜잭션의 롤백을 표시하지않는 Exception 트랙잭션을 롤백을 표시한다는 것은 간단하게 말하자면 스프링에서 트랜잭션을 사용하려고할 때 내부 쓰레드가 rollback only mark가 되어있는지 확인하고 안되어 있다면 정상적으로 비지니스 로직을 처리하..
서론 데이터 베이스를 통해 데이터를 처리하고 관리하는데 SQL을 사용하였지만 데이터베이스에서 어떻게 SQL을 동작시키고 최적화시키는지 이해하고 쓰지 못하고 사용을 하면서 쿼리튜닝을 하는데 있어서 어려움을 겪었던 적이 있다. 이러한 삽질을 줄이고 쿼리의 성능을 개선해야될 때 쿼리의 동작을 이해하고 예상가능한 범위내에서 동작시키는 것이 중요하기 때문에 공부를 시작했다. SQL 옵티마이저 SQL 옵티마이저는 우리가 요청한 작업을 효율적으로 수행할 수 있도록 도와주는 DBMS의 핵심 엔진이다. 옵티마이저의 최적화 시키는 동작은 보통 아래와 같이 데이터 딕셔너리에 미리 수집해둔 오브젝트 및 시스템 통계 정보를 통해 예상비용을 산정하고 최저 비용이 드는 경로를 선택한다. 실행 계획과 비용 SQL 옵티마이저는 자동차..
복합키란? 복합 키(Composite Key)는 두 개 이상의 PK를 하나로 PK로 지정하는 것을 말한다. 이러한 복합키를 가지고 있는 논리 모델은 식별 관계와 비식별 관계로 구분되어 사용한다. 식별 관계 부모테이블의 기본키를 상속 받고 자식 테이블의 기본키 + 외래키의 구조로 사용되는 구조 입니다. 비식별 관계 비식별 관계는 부모 테이블의 기본키만 받아서 자식 테이블의 FK로 사용하는 것이 비식별 관계입니다. 이러한 관계는 FK가 Null이냐 아니냐에 따라서 필수적 비식별 관계와 선택적 비식별 관계로 구분되어집니다. JPA는 이러한 식별, 비식별 관계를 모두 제공합니다. JPA에서의 복합키 JPA에서는 아래와 같은 두개의 식별자를 사용하려면 오류가 발생하기 때문에 별도의 식별자 클래스를 만들어야합니다...
데이터 베이스에서 상속 관계 관계형 데이터베이스에서는 상속이라는 개념이 존재하지 않는다. 그래서 보통 슈퍼타입과 서브타입으로 분리시키는 방식으로 구현을 한다. 이러한 논리 모델을 구현하기 위해서는 세가지 방법이 존재하는데 각각 방법에 대한 장점과 단점을 알아보자 조인전략: 각각의 테이블로 변환 각각의 논리 모델을 모두 테이블로 만들고 부모테이블의 PK를 받아서 기본키와 외래키를 통해 사용하는 전략이다. 해당 방법을 사용할 때 주의할 점은 객체에서는 타입으로 구분할 수 있지만 데이터베이스에는 그런 개념이 없기 때문에 타입을 구분하는 전략을 사용해 주어야한다. Table 구조 Entity 구조 부모 클래스(Product) @Entity @Inheritance(strategy = InheritanceType...