[JPA] JQPL enum Type 조건문 사용하는 경우

반응형
728x90
반응형

예제코드

  • Member.java
package jpql;

import javax.persistence.*;

@Entity
@Table(name="MEMBER")
public class Member {

    @Id
    @GeneratedValue
    private Long id;

    private String username;
    private int age;

    @ManyToOne(fetch = FetchType.LAZY) // Many 쪽(Member)에 TEAM_ID 컬럼 생성됨
    @JoinColumn(name = "TEAM_ID")
    private Team team;

    @Enumerated(EnumType.STRING)
    private MemberType type;

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

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setTeam(Team team) {
        this.team = team;
    }

    public void changeTeam(Team team) {
        this.team = team;
        team.getMembers().add(this);
    }
}

 

여기서, 아래 코드에 주목하자.

@Enumerated(EnumType.STRING)
private MemberType type;

 

  • MemberType.java
package jpql;

public enum MemberType {
    ADMIN
}

 

 

상황

Member 엔티티의 type 컬럼을 조건절에 사용해야한다.

Member member = new Member();
member.setUsername("kimseohae");
member.setType(MemberType.ADMIN);
member.setAge(10);

em.persist(member);

Query query = em.createQuery("select m.username, 'HELLO', TRUE from Member as m " +
    "where m.type = jpql.MemberType.ADMIN"); // MemberType 은 전체로 작성

 

1) enum 인 MemberType은 아래와 같이 사용되었다.

where m.type = jpql.MemberType.ADMIN

 

2) 파라미터 바인딩으로도 해결할 수 있다.

List<Object[]> list = em.createQuery("select m.username, 'HELLO', TRUE from Member as m " +
                    "where m.type = :userType")
                    .setParameter("userType", MemberType.ADMIN)
                    .getResultList(); // MemberType 은 전체로 작성

list.forEach(System.out::println);

 

 

 

반응형

Designed by JB FACTORY