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

标签 java jakarta-ee jpa jpql entities

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

相关文章:

java - 如何在 Java 中获取 URL 对象内路径的父级?

mysql - 在 JPA 中创建表时出现问题

java - 如何使用 JPA 和 @Query 命名参数将数据导入 MySQL

java - 简单的 PHP NAT 穿透服务器脚本

java - Spring Boot上传文件大小限制

java - 放心 解析 JSON 文档失败

java - 可以嵌套异步上下文吗?

java - 如何在 Spring Boot 测试中设置 'headless' 属性?

tomcat - @Inject 属性在 Tomcat 上返回 null

java - 如何为 JPA2 实体定义默认访问类型