2019. 5. 20. 11:57ㆍ[정리] 기능별 개념 정리/JPA
JPQL 에서 쿼리의 테이블 이름은 엔티티의 클래스 이름을 입력하는 것이 기본이다.
MemberEntity
@Data
@Entity
@Table(name = “member_table”)
public class MemberEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(updatable = false, nullable = false)
private long id;
private String name;
}
member_table 테이블을 만들고 이는 MemberEntity로 맵핑된다.
MemberEntity 의 이름은 MemberEntity 이다.
MemberRepository
public interface MemberRepository extends JpaRepository<MemberEntity, Long> {
@Query(value="SELECT DISTINCT m.name FROM MemberEntity m")
ArrayList<MemberEntity> customQuery(ArrayList<Long> issueIds);
}
MemberEntity 인 것에 주목 : SELECT DISTINCT m.name FROM MemberEntity m
1. JPQL은 쿼리안의 MemberEntity 을 본다.
2. 이름이 MemberEntity 인 엔티티를 찾는다.
3. 이름이 MemberEntity 인 엔티티는 MemberEntity이다.
4. MemberEntity 와 맵핑되는 테이블을 찾는다.
5. MemberEntity 와 맵핑되는 테이블은 member_table 이다.
6. member_table 과 MemberEntity를 맵핑하여 쿼리를 완성한다.
만약 Entity(name)을 줬을 경우
MemberEntity
@Data
@Entity(name = “member_table”)
public class MemberEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(updatable = false, nullable = false)
private long id;
private String name;
}
member_table 테이블을 만들고 이는 MemberEntity로 맵핑된다.
MemberEntity 의 이름은 member_table이다.
MemberRepository
public interface MemberRepository extends JpaRepository<MemberEntity, Long> {
@Query(value="SELECT DISTINCT m.name FROM member_table m")
ArrayList<MemberEntity> customQuery(ArrayList<Long> issueIds);
}
member_table 인 것에 주목 : SELECT DISTINCT m.name FROM member_table m
1. JPQL은 쿼리안의 member_table 을 본다.
2. 이름이 member_table 인 엔티티를 찾는다.
3. 이름이 member_table 인 엔티티는 MemberEntity이다.
4. MemberEntity 와 맵핑되는 테이블을 찾는다.
5. MemberEntity 와 맵핑되는 테이블은 member_table 이다.
6. member_table 과 MemberEntity를 맵핑하여 쿼리를 완성한다.
만약 다음과 같이 쓸 경우 QuerySyntaxException: MemberEntity is not mapped 에러가 난다.
MemberEntity
@Data
@Entity(name = “member_table”)
public class MemberEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(updatable = false, nullable = false)
private long id;
private String name;
}
MemberRepository
public interface MemberRepository extends JpaRepository<MemberEntity, Long> {
@Query(value="SELECT DISTINCT m.name FROM MemberEntity m")
ArrayList<MemberEntity> customQuery(ArrayList<Long> issueIds);
}
1. JPQL은 쿼리안의 MemberEntity 을 본다.
2. 이름이 MemberEntity 인 엔티티를 찾는다.
3. 없다. (클래스 MemberEntity의 엔티티 이름은 member_table 이므로)
4. 에러 : JPQL 은 MemberEntity가 뭔지 모르므로 맵핑할 수 없다.
'[정리] 기능별 개념 정리 > JPA' 카테고리의 다른 글
JPA fetch 맵핑별 기본값 (0) | 2019.06.14 |
---|---|
JPA delete (0) | 2019.06.12 |
영속성 컨텍스트 정리 (0) | 2019.05.20 |
Orphan removal vs Cascade.remove (0) | 2019.05.16 |
JPA 양방향 맵핑, Test 코드 작성시 유의사항 (0) | 2019.04.25 |