티스토리 뷰
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
반응형
'[데이터베이스] > 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