JPQL 查询实体内的字符串列表

JPQL Query a list of Strings inside an Entity

我正在使用 Java EE7 和 GlassFish 4.1 Server 构建一个系统,基本上您可以在其中 post 想法,每个想法都可以有标签。 我已将实体 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

你想要结果作为想法,但你 select 一个列表。

你的List标签是在ideatags中获取的,所以你获取不到ideatags的属性标签。

如果要在列表中搜索,则必须使用 IN。

你可以试试这个:

select i
from Idea i
where :pTag IN (i.tags)

试试这个:

select e from entity e WHERE :element in elements(e.listOfStrings)