코드 그라데이션

JPQL 타입 표현 본문

Database/JPQL

JPQL 타입 표현

완벽한 장면 2023. 8. 31. 15:07

JPQL 타입 표현

 

예시들

MemberType

public enum MemberType {
  ADMIN, USER
}

 

Member에 필드로 추가

  @Enumerated(EnumType.STRING)
  private MemberType type;

 

JpqlMain 수정

public class JpqlMain {

  public static void main(String[] args) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
    EntityManager em = emf.createEntityManager();

    EntityTransaction tx = em.getTransaction();
    tx.begin();

    try {
    
      Team team = new Team();
      team.setName("TeamA");
      em.persist(team);

      Member member = new Member();
      member.setUsername("member1");
      member.setAge(10);
      em.persist(member);

      member.setTeam(team); // 연관관계 편의 메서드 만들러 Member 다녀옴.

      em.flush();
      em.clear(); // 비움

      String query  = "select m.username, 'HELLO', TRUE from Member m";
      List<Object[]> result = em.createQuery(query)
              .getResultList();

      for (Object[] objects : result) {
        System.out.println("objects = " + objects[0]);
        System.out.println("objects = " + objects[1]);
        System.out.println("objects = " + objects[2]);
      }
      tx.commit();
    } catch (Exception e) {
      tx.rollback();
      e.printStackTrace();
    } finally {
      em.close();
    }
    emf.close();
  }

}

 

 

실행 결과

 

여기서 타입 조건을 다 넣어주고 싶으면 패키지명 풀경로 추가

일단 Member에 Setter 넣고

public void setType(MemberType type) {
  this.type = type;
}

 

쿼리문 조금 수정해줘야함.

String query  = "select m.username, 'HELLO', TRUE from Member m "
    + "where m.type = inflearnjpa.jpql.MemberType.ADMIN";

이렇게, 그리고 type까지 위에 세팅한 전체 코드는

public class JpqlMain {

  public static void main(String[] args) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
    EntityManager em = emf.createEntityManager();

    EntityTransaction tx = em.getTransaction();
    tx.begin();

    try {
      // 팀 먼저 저장
      Team team = new Team();
      team.setName("TeamA");
      em.persist(team);

      Member member = new Member();
      member.setUsername("member1");
      member.setAge(10);
      member.setType(MemberType.ADMIN); // 여기 추가
      em.persist(member);

      member.setTeam(team); // 연관관계 편의 메서드 만들러 Member 다녀옴.

      em.flush();
      em.clear(); // 비움

      String query  = "select m.username, 'HELLO', TRUE from Member m "
          + "where m.type = inflearnjpa.jpql.MemberType.ADMIN";
      List<Object[]> result = em.createQuery(query)
              .getResultList();

      for (Object[] objects : result) {
        System.out.println("objects = " + objects[0]);
        System.out.println("objects = " + objects[1]);
        System.out.println("objects = " + objects[2]);
      }

      tx.commit();
    } catch (Exception e) {
      tx.rollback();
      e.printStackTrace();
    } finally {
      em.close();
    }
    emf.close();
  }
}

 

실행하면

잘 나오고, USER로 바꾸면

String query  = "select m.username, 'HELLO', TRUE from Member m "
    + "where m.type = inflearnjpa.jpql.MemberType.USER";

 

출력 결과는

 

 

좀 더 깔끔하게 쓰고 싶으면 파라미터 바인딩 사용

String query  = "select m.username, 'HELLO', TRUE from Member m "
    + "where m.type = :userType";
List<Object[]> result = em.createQuery(query)
    .setParameter("userType", MemberType.ADMIN)
    .getResultList();

이렇게.

 

마지막 사례는 그냥 훑고만 넘어감

엔티티 타입 : Type(m) = Member (상속 관계에서 사용)

쿼리는

DTUPE이 쓰인다.

(상속관계 편 참고)

 


JPQL 기타

 

여기까지

 

728x90

'Database > JPQL' 카테고리의 다른 글

JPQL 함수들  (0) 2023.09.01
조건식  (0) 2023.08.31
서브 쿼리  (0) 2023.08.31
조인 (2) - ON 절  (0) 2023.08.30
조인 (1) - 내부 조인, 외부 조인, 세타 조인  (0) 2023.08.30
Comments