kok202
Differences between @Entity(name) and @Table(name)

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