예제 소스코드(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; @..
필드와 컬럼 매핑 엔티티 클래스의 각 필드에 여러 가지 옵션을 갖는 어노테이션을 붙여서 더 자세히 매핑할 수 있다. Column 별 매핑 상세 @Column : 컬럼 DB 테이블의 각 컬럼 관련 제약사항 등을 추가할 수 있다. @Enumerated : enum 타입 DB에는 enum 타입이 없기 때문에 속성을 지정할 수 있다. enum은 기본적으로 숫자, 문자열 두 가지가 있다. @Enumerated(EnumType.STRING) private RoleType roleType; EnumType.STRING으로 지정하면 실제 enum의 문자열이 저장되고, EnumType.ORDINAL로 지정하면 enum 순서를 0부터 시작되는 숫자로 지정된다. STRING이 권장되고, ORDINAL은 사용하지 않는 게 좋..
@Entity 클래스에는 기본적으로 PK(PrimaryKey)가 있어야 한다. PK로 사용할 칼럼에 @Id 어노테이션을 사용하여 해당 칼럼을 PK로 설정한다. 이 PK 매핑 방법과 여러 가지 속성들에 대해 알아보자. PrimaryKey Mapping 기본적으로 @Id 어노테이션은 꼭 필요하다. 여기에 자동 생성을 위한 @GeneratedValue 어노테이션을 붙일 수 있다. PrimaryKey를 사용자가 설정하는 userId 등으로 설정할 때는 @Id 어노테이션만 사용하면 되고, ID를 임의의 값으로 순차적으로 증가시킬 때는 @GenaeratedValue 어노테이션을 추가하면 된다. Key 자동 할당 Key를 자동 할당하는 방법에는 IDENTITY, SEQUENCE, TABLE, AUTO 가 있다. Ke..
ORM은 객체와 RDB의 테이블을 자동으로 매핑하는 기술이다. JPA에서는 Java 클래스를 Entity로 지정하여 해당 Entity 클래스와 DB의 테이블을 매핑한다. 엔티티 클래스 @Entity @Entity가 붙은 클래스는 JPA가 관리하고, 이를 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 붙여줘야 한다. @Entity public class Member{ @Id Long id; String name; public Member(){} } @Id로 Primary Key를 필수로 설정해줘야 하고, 기본 생성자가 필수로 존재해야 한다. @Entity 어노테이션의 속성으로 name을 추가할 수 있다. 이 속성을 추가하면, 실제 엔티티 클래스와 DB의 엔티티 이름을..