2017-11-27 5 views
1

를 사용하여 각각 EnumSet에서 테스트하는 방법 :열거 값이있는 경우 다음과 같이 나는 속성이 JPQL

@Entity 
class Project implements Serializable { 
    @Convert(converter = TypeFlattener.class) 
    @Column(name = "assignable_types") 
    private EnumSet<Type> assignableTypes; 

TypeFlattener의 요점은 내가 그렇게 기본적으로는 변환하고, 간단한 목록 정상화를 방지 할 것입니다 EnumSet 쉼표로 구분 된 값이있는 간단한 문자열과의 사이에 쉼표로 구분 된 값이있는 Enum.name()

이제는 특정 유형이 assignableTypes 인 프로젝트 만 필터링 할 수 있습니까?

내 가장 좋은 방법은 그런 일이 될 것입니다 :

내가 :t 위해 안으로 통과 무엇
@NamedQuery(
    name="Project.findByType", 
    query="SELECT p FROM Project p WHERE :t IN p.assignableTypes" 
) 

? String 버전은 다음과 같습니다. 나는 이것을 할 수 있을까?

q.setParameter("id", "MAJOR"); 

답변

2

변환기는 데이터베이스 표현에만 영향을 미치기 때문에 여기서 중요하지 않습니다. MEMBER OF을 사용하는 아래 쿼리가 작동합니다.

TypedQuery<Project> query = em.createQuery(
    "SELECT p FROM Project p WHERE :type MEMBER OF p.assignableTypes", Project.class); 
query.setParameter("type", Type.ONE); 
List<Project> resultMemberOf = query.getResultList(); 
+0

너무 짧고 짧습니다. 감사. – YoYo