无法在JPA查询中使用“IN”

问题描述:

我试图从0123A关系的JPA查询中获得结果。我有实体 -无法在JPA查询中使用“IN”

A.java 
@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER) 
@JoinTable(name = "a_tags") 
private List<Tag> tags; 

然后我尝试运行下面的查询 -

Query query2 = entityManager 
      .createQuery("select s from A s where s.tags IN(:tags)"); 
    query2.setParameter("tags", findTags(keyword)); 

但我不断收到以下错误java.sql.SQLException: No value specified for parameter 1

我以前使用过IN的条件,但只是为了检查集合中的单个对象。

任何指针?

相关信息 -

  • 的Hibernate 4.3.5决赛

select distinct s from A s join s.tags t where t IN (:tags) 
+0

工作。是因为'ManyToMany'映射而需要'JOIN'?因为IIRC,它在'ManyToOne'中不是必需的。 – lazyprogrammer

+0

的确,它是必需的,因为标签是一个集合(一对多或多对多)。 –

当使用在具有集合值参数,你不需要使用(...)

Query query2 = entityManager 
      .createQuery("select s from A s where s.tags IN :tags"); 
    query2.setParameter("tags", findTags(keyword)); 
+0

试过了,它也给出了同样的错误。 – lazyprogrammer

+0

query2.setParameterList(“tags”,findTags(关键字)) – prsmax