簡體   English   中英

JPQL 查詢實體內的字符串列表

[英]JPQL Query a list of Strings inside an Entity

我正在使用 Java EE7 和 GlassFish 4.1 Server 來構建一個系統,基本上您可以在其中發布想法,並且每個想法都可能有標簽。 我已將實體 Idea 聲明為:

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

// Id, description, etc.

@ElementCollection
private List<String> tags;

// Getters, Setter, etc.
}

閱讀JPA 后:查詢實體內的可嵌入列表我試圖通過以下方式通過標簽找到:

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] state 字段路徑“ideatags.tags”無法解析為有效類型。

感謝您的幫助,在此先感謝!!

您的查詢有一些問題:

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

您希望結果為 Idea 但您選擇了一個列表。

您在ideatags 中獲取List 標簽,因此您無法獲取ideatags 的屬性標簽。

如果要在列表中搜索,則必須使用 IN。

你可以試試這個:

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

嘗試這個:

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

elements() - 這項工作!

其中:pTag IN (i.tags) 不起作用 (

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM