[英]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.