본문 바로가기
자바/JPA

[JPA/Java] JPQL 타입 표현과 기타식

by drCode 2023. 5. 9.
728x90
반응형

JPQL에서 타입 표현은 아래와 같이 가능하다.

 

(1) 문자 :  'HELLO', 'She''s' : ' 를 표현하려면 두번 적으면 된다.

(2) 숫자 : 10L(Long), 10D(Double), 10F(Float)

(3) Boolean : TRUE, FALSE

(4) ENUM : jpabook.MemberType.Admin (패키지명 포함)

 

예시)

① MemberType.java 생성

package jpql;

public enum MemberType {
    ADMIN, USER
}

② Member.java 에 MemberType type 추가

@Enumerated(EnumType.STRING)
private MemberType type;

public MemberType getType() {
    return type;
}

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

@Override
public String toString() {
    return "Member{" +
            "id=" + id +
            ", username='" + username + '\'' +
            ", age=" + age +
            ", type=" + type +
            '}';
}

 

③ JpaMain.java 에 예제 소스 추가

Team team = new Team();
team.setName("teamA");
em.persist(team);

Member member = new Member();
member.setUsername("teamA");
member.setAge(10);
member.setTeam(team);
member.setType(MemberType.ADMIN);
em.persist(member);

em.flush();
em.clear();

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

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

ENUM 타입 추가

 

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

 

예시)

 

① Book.java 에 @DiscriminatorValue 추가

package jpabook.jpashop.domain;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@DiscriminatorValue("BB")
public class Book extends Item{

    private String author;
    private String isbn;

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }
}

 

② JpaMain.java 에 예제 소스 추가

Book book = new Book();
book.setName("JPA");
book.setAuthor("김기룡");
em.persist(book);

List<Item> resultList = em.createQuery("select i from Item i where type(i) = Book", Item.class).getResultList();

tx.commit();

엔티티 타입 JPQL 조회

 

JPQL 기타 표현식

 - SQL과 문법이 같은 식

 - EXISTS, IN

 - AND, OR, NOT

 - =, >, >=, <, <=, <>

 - BETWEEN, LIKE, IS NULL

728x90
반응형

댓글