카르케시안 곱(Cartesian Product) 란?Cartesian 곱은 2개의 테이블을 Join 할 때 모든 조합의 데이터를 생성하는 곱집합을 말한다.예를 들면 User를 참조하고 있는 Order 3개, Payment 5개가 있을 때, 총 15개의 결과가 나온다.아래(더 보기)는 카르테시안 곱을 처음 보는 분들을 위한 쿼리 예제입니다.더보기app_userSELECT * FROM app_user uwhere id = '4a421c1c-8df2-4ef2-845d-07d9a216c114';ordersSELECT * FROM orderswhere user_id = '4a421c1c-8df2-4ef2-845d-07d9a216c114';paymentSELECT * FROM paymentwhere user_id ..
복합키(Composite key)관계형 데이터베이스에서 복합키(Composite Key)란, 두 개 이상의 컬럼을 조합하여 하나의 기본 키(Primary Key)로 사용하는 것을 의미한다. 단일 컬럼만으로는 데이터의 고유성을 보장할 수 없을 때, 여러 컬럼을 묶어 하나의 키로 사용하는 방식이다. 아래 테이블처럼, 주문번호와 상품번호 두개를 묶어야 하나의 고유한 key가 되는 경우를 말한다.이런 경우에 JPA에서 단일키를 사용할 때보다 복잡하고, 귀찮은 작업이 필요하다. 복합키가 꼭 필요하지 않다면, 단일키 전략을 사용하는 것이 낫다고 생각하지만,이미 존재하는 테이블을 엔티티 매핑 해야할 때가 있을것이다.복합키 매핑 시 특징key class에 Serializable을 구현해야된다.key class에 equ..
QueryDSL은 JPA와 함께 사용하여, 복잡한 동적 쿼리, Join 쿼리 등을 최적화해 준다.이중 BooleanExpression을 주로 사용하여 where 조건절을 세팅한다.이 글은 Boolean expression을 사용하는 여러 상황을 정리하고, BooleanExpression이 제공하는 메서드를 살펴본다.Version# versionspring-boot: 3.4.3JPA: 3.1.0querydsl: 5.0.0# build.gradledependencies { implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta" annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annot..
예제 소스코드(Google Drive)https://drive.google.com/file/d/1YrsS9-sjHM4QSLhe-5GZsvcfVlvMI_Z9/view?usp=sharingapplication.property 파일 수정해서 DB 연결해서 테스트해 보실 수 있습니다. (소스코드에서는 xxx처리) JPQL을 이용해서 DTO를 반환??? JPA를 이용하는 경우, 특정 상황에서 Entity 전체가 아닌 일부 컬럼만을 가져오고 싶을 때, @Query 어노테이션 내에 작성하는 JPQL에서 Java 객체를 생성하는 코드를 추가하는 방법을 사용할 수 있다. Spring-data-jpa가 제공하는 JpaRepository 인터페이스를 이용할 것이고, 회원과 주문으로 구성된 간단한 예제이다.회원(MemberE..
JPA 연관관계 매핑의 종류 JPA 연관관계 매핑의 종류는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany가 있다. 이 글에서는 @ManyToMany 관계에 대해 다룬다. @ManyToMany : 다대다 매핑 RDBMS는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 따라서 연결 테이블을 추가해서 다대다 관계를 일대다 + 다대일 관계로 풀어내야 한다. 결론적으로는 다대다 매핑은 실무에서 사용하지 않는 방법이라고 한다. @ManyToMany 양방향 매핑 example @Entity public class Member { @Id @GeneratedValue private Long id; private String username; @ManyToMany @JoinT..
테이블 간의 연관관계 기존 테이블 간의 연관관계 설정 기본적으로 데이터베이스에서 엔티티(테이블) 간의 연관관계는 Foreign Key를 통해서 하는 것을 알고 있을 것이다. 그러나 Java에서 이 Key를 가지고 다른 테이블을 넘나들려면 꽤나 긴 과정이 필요하다. Member 엔티티와 멤버가 소속된 Team 엔티티를 가정해 보자. [JPA 사용 시 가능해지는 연관관계 설정 예제] 더보기 예제(memberId로 멤버가 소속된 팀의 이름을 찾아보자) Member객체는 필드로 Long teamId를 갖고 데이터베이스 MEMBER 테이블이 TEAM_ID 럼을 갖게 될 것이다. 이런 경우 memberA라는 멤버의 team의 이름을 구하려고 하면 어떻게 해야 할까? Member member = memberRepos..
JPA 연관관계 매핑의 종류 JPA 연관관계 매핑의 종류는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany가 있다. 이 글에서는 @OneToOne 관계에 대해 다룬다. 아래 예제에서는 Member(멤버)가 하나씩 가질 수 있는 Locker(사물함)을 가정했다. @OneToOne(일대일 매핑) 기본적으로 @ManyToOne의 매핑 관계와 유사하다. Member와 Locker(사물함) 엔티티가 1대 1 매핑된다고 가정하자. 일대일 매핑시에는 FK에 unique 제약조건을 추가하는 것이 좋다. 일대일 단방향 (ex 1) (Member가 연관관계의 주인) @Entity public class Member { @Id @GeneratedValue private Long id; p..
JPA 연관관계 매핑의 종류 JPA 연관관계 매핑의 종류는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany가 있다. 이 글에서는 @ManyToOne과 @OneToMany 관계에 대해 다룬다. 아래 예제에서는 Team에 속해있는 여러 Member들을 가정했다. @ManyToOne(다대일 매핑) 가장 많이 사용하는 연관관계로 여러 개(Many)의 멤버가 한 개(One)의 팀에 속해있는 것을 생각하면 된다. Member가 Team의 ID를 FK로 갖게 된다. 이러한 관계에서 연관관계의 주인은 Member이다. @Entity public class Member { @Id @GeneratedValue private Long id; private String username; @..