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)
我正在使用 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)