2016-03-15 65 views
0

我想做一個搜索ob用戶提供的一些變量的基礎。HQL where子句用String集合類型

我在做什麼,從表收集數據實現:

這裏是我的實體:

@Entity 
@Table 
public class FrontRequest implements Serializable { 
    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    private Long tutorfront_id; 

    @Column 
    private String tutorialType; 

    @Column 
    private String tutorialLevel; 

    @ElementCollection(fetch=FetchType.EAGER) 
    @Fetch(value = FetchMode.SELECT) 
    private Collection<String> tutorialSubjects= new HashSet<String>(); 

    @Column 
    private String tutorialCity; 

    @Column 
    private String noOfStudent; 

    @Column 
    private String classWeek; 

    @Column 
    private String tutionFee; 

    @Column 
    private String tutionFeerate; 

    @Column 
    private String tutorSex; 

    @Column 
    private String tutorEducation; 


    @Column 
    private Date postingDate; 

    @Column 
    private String studentSchool; 
} 

現在我想獲取FrontRequest對象作爲列表,在這裏我有一個主題作爲輸入。

現在我想在FrontRequest.TutorialSubjects中獲得FrontRequest主題。

爲此,我試圖做類似下面:

Query query=session.createQuery("from FrontRequest frontreq where :tutorialsubject IN frontreq.tutorialSubjects"); 

query.setParameter("tutorialsubject", tutorialSubject); 

List<FrontRequest> frontRequest=query.list(); 

但與無效的語法給予例外。

我不知道我錯在哪裏。可能是我做錯了方式。

是問題是同樣喜歡

Issue when trying to use the IN operator in a JPQL query

但是,它的觀點略有不同,即我在這裏使用字符串類型的集合在我的實體。而當我想在這裏使用的一員,它不是與工作,並拋出一個異常

org.hibernate.hql.internal.ast.QuerySyntaxException:樹[從com.tutor.entity的意外結束。 FrontRequest frontreq where frontreq.tutorialCity like'%'and:tutorialsubject會員的frontreq.tutorialSubjects]

請幫忙。

在此先感謝。

+0

[嘗試在JPQL查詢中使用IN運算符時出現問題]的可能重複(http://stackoverflow.com/questions/32631930/issue-when-trying-to-use-the-in-operator-in -a-jpql-query) –

+0

這裏我使用字符串類型集合而不是用戶定義的類型。 –

回答

0

最後我解決了where子句中「In elements」的問題。

查詢:

from FrontRequest frontreq where :tutorialsubject IN elements (frontreq.tutorialSubjects) 

query.setParameter("tutorialsubject", tutorialSubject); 

List<FrontRequest> frontRequest=query.list(); 

感謝所有,應該給+1吧。