我正在使用 Java EE7 和 GlassFish 4.1 服务器来构建一个系统,基本上您可以在其中发布想法,并且每个想法可能有标签。 我已将实体 Idea 声明为:
@Entity
@Table(name = "IDEAS")
public class Idea implements Serializable {
// Id, description, etc.
@ElementCollection
private List<String> tags;
// Getters, Setter, etc.
}
阅读后JPA: Query an embeddable List inside an entity我尝试通过以下方式通过标签查找:
public List<Idea> getIdeasWithTag(String tag) {
String queryStr = "select ideatags from Idea i "
+ "inner join i.tags ideatags "
+ "where ideatags.tags = :pTag";
Object res = em.createQuery(queryStr)
.setParameter("pTag", tag)
.getResultList();
return (List<Idea>) res;
}
但是我收到了由以下原因引起的 TransactionRolledbackLocalException:
Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: Exception Description: Problem compiling [select ideatags from Idea i inner join i.tags ideatags where ideatags.tags = :pTag]. [61, 74] The state field path 'ideatags.tags' cannot be resolved to a valid type.
感谢您的帮助,提前致谢!!
最佳答案
您的查询存在一些问题:
select ideatags
from Idea i inner join i.tags ideatags
where ideatags.tags = :pTag
您希望结果为想法,但您选择了一个列表。
您在ideatags中获取List标签,因此无法获取ideatags的属性标签。
如果您想在列表中搜索,则必须使用 IN。
你可以试试这个:
select i
from Idea i
where :pTag IN (i.tags)
关于java - JPQL 查询实体内的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31052792/