2016-07-31 4 views
1

최대 절전 모드 필터를 실행하려고합니다. 스레드에서java.lang.IllegalArgumentException : 정의되지 않은 필터 매개 변수 [p1]

예외 "주": 여기

내 POJO 클래스입니다 :

@Entity 
@Table(name="flight") 
@FilterDef(name="f1",[email protected](name="status",type="String")) 
@Filter(name="f1",condition="status=:p1") 
public class Flight 
{ 
    @Id 
    @Column(name="flightno") 
    private int flightNumber; 

    @Column(name="src", length=10) 
    private String source; 

    @Column(name="dest",length=10) 
    private String destination; 

    @Column(name="status",length=10) 
    private String status; 
//setter & getters 
} 

그리고 여기 내 주요 클래스 코드입니다 :

public static void main(String[] args) 
{ 
     //code for getting SessionFactory Object 
     Session session=factory.openSession(); 
     Transaction tx=session.beginTransaction(); 

    Query query=session.createQuery("from Flight f"); 
    Filter filter=session.enableFilter("f1"); 
    filter.setParameter("p1","DELAYED"); 
    List list=query.list(); 
    Iterator itr=list.iterator(); 
    while(itr.hasNext()) 
    { 
     Flight f=(Flight)itr.next(); 
     System.out.println("FLIGHT NO:"+f.getFlightNumber()); 
     System.out.println("SOURCE :"+f.getSource()); 
     System.out.println("DESTINATION :"+f.getDestination()); 
     System.out.println("STATUS :"+f.getStatus()); 

     session.close(); 
    } 

하지만 난 이런 식으로 출력입니다 java.lang.IllegalArgumentException : 정의되지 않은 필터 매개 변수 [p1]

답변

3

이 경우의 오류 메시지 오해의 소지가 있습니다. Hibernate는 필터 매개 변수가 잘못 구성되었다고 말하려고합니다.

Long과 비슷한 매핑이있을 때이 문제가 발생했습니다. 이 문제는 ParamDef의 형식 정의에있는 것으로 보입니다. 어떤 이유로 type 매개 변수의 클래스 이름을 사용하면 L ong 및 S tring이 작동하지 않습니다. 당신이 "긴"또는 "문자열을"소문자를 사용하여 "원시"로 지정하면

이 제대로

@ParamDef(name="status",type="string") 
유형을지도 않습니다