带有String集合类型的HQL where子句

时间:2016-03-15 15:30:17

标签: java hibernate hql

我想根据用户提供的一些变量进行搜索。

我正在做什么来从表集合中获取数据:

这是我的实体:

@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,其中frontreq.tutorialCity喜欢'%'和:tutorialsubject成员前面的教程主题]

请帮忙。

提前致谢。

1 个答案:

答案 0 :(得分:0)

最后我用&#34; In elements&#34;解决了问题。在where子句中。

查询是:

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

query.setParameter("tutorialsubject", tutorialSubject);

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

感谢All,应该给它+1。