2016-03-15 64 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吧。