当前位置: 首页 > 知识库问答 >
问题:

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

佟翰林
2023-03-14

我使用Java EE7和GlassFish 4.1服务器来构建一个系统,基本上你可以在这个系统中发表想法,每个想法都可以有标签。我已经把实体的概念声明为:

@Entity
@Table(name = "IDEAS")
public class Idea implements Serializable {

// Id, description, etc.

@ElementCollection
private List<String> tags;

// Getters, Setter, etc.
}

阅读JPA:查询实体中的可嵌入列表后,我尝试通过Tag以以下方式查找:

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,原因是:

导致:java.lang.IllegalArgumentException:在EntityManager中创建查询时发生异常:异常描述:编译问题[从Idea i内部连接i.tags中选择IDEATag,其中IDEATag.tags=:pTag]。[61,74]状态字段路径“ideatags”。标记“”无法解析为有效类型。

我感谢任何帮助,提前感谢!!

共有2个答案

龙成仁
2023-03-14

试试这个:

select e from entity e WHERE :element in elements(e.listOfStrings)
金昌胤
2023-03-14

您的查询有一些问题:

select ideatags 
from Idea i inner join i.tags ideatags
where ideatags.tags = :pTag

您希望结果为Idea,但选择了一个列表。

你在ideatags中得到你的列表标签,因此你不能得到ideatags的属性标签。

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

你可以试试这个:

select i
from Idea i
where :pTag IN (i.tags)
 类似资料:
  • 问题内容: 是否有任何JavaScript库可以根据查询字符串,样式生成字典? 可以像这样使用的东西: “查询字符串”是否在.NET领域之外称为其他名称?为什么不分解为键/值集合? 编辑:我已经编写了自己的函数,但是任何主要的库都可以这样做吗? 问题答案: 是否有任何JavaScript库可以根据查询字符串,样式生成字典? 可以像这样使用的东西: “查询字符串”是否在.NET领域之外称为其他名称?

  • 我必须在Spring引导中编写一个相当于下面查询的JPQL查询。 查询: 我进行的JPQL查询: 查询不工作,出现以下异常: 有人能告诉我我的代码有什么问题吗?

  • 问题内容: 考虑到与类似值的字符串列,什么是查询所有的最佳方法 ,其中包括给定数量的记录 (例如)? 我脑海中的解决方案是: 但由于前导,因此AFAIK该查询无法在列上使用索引。 必须有更好的东西。它是什么? 使用PostgreSQL,但 更希望 该解决方案也适用于其他DB。 问题答案: 在PostgreSQL 9.1中,您可以利用该模块并用它构建一个GIN索引。 您的表达式即使没有左锚也可以使用

  • 在我删除索引之后。php,我在codeigniter中启用查询字符串。但我有一些重定向链接的问题。详细信息,我有登录表单(登录/索引),登录成功时重定向到“欢迎/索引”,并在会话中保存电子邮件。 但是登录成功时只加载视图的"欢迎/索引"和错误的链接,现在链接是:"?登录/索引"并且会话不保存。请帮帮我。 这是我的密码 登录。php(控制器) Welcome.php(控制器) 欢迎留言。php(视图

  • 我是JPA/JPQL的新手,所以如果这个问题不是很清楚,请原谅。 我正在使用以下JPQL查询: 查询在无状态会话上运行,以便获得DB中当前数据的事实上的快照,该快照与实体管理器分离(因此使用了left join fetch)。 不幸的是,我遇到了两个问题: 在尝试微调性能时,使用本机查询似乎并没有比使用JPQL查询更好的性能。使用本机查询也会产生对象类型的结果,这需要后期处理。

  • 问题内容: 我有一个使用C#和asp.net创建的webapp。我将参数值放在带有加号(+)的查询字符串中。但是加号消失了。 如何在查询字符串中包含加号(+)而不会消失? 请指教。 谢谢。 编辑:使用UrlEncode添加代码 问题答案: 符号在查询字符串中具有语义。它用来表示一个空间。在查询字符串中具有语义重要性的另一个字符是用于分隔查询字符串中的各个对。 大多数服务器端脚本会在使用查询参数之前