0
我在使用LIKE expresion搜索文章標題,正文和標籤名稱中的關鍵字。文章和標籤定義使用一對多的關係遍歷JPQL中的集合
這裏是我的類的代碼片段:
@Entity
public class Article implements Serializable {
@Basic(optional = false)
@NotNull
@Lob
@Size(min = 1, max = 65535)
@Column(name = "body", nullable = false, length = 65535)
private String body;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 250)
@Column(name = "title", nullable = false, length = 250)
private String title;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 9)
@Column(name = "status", nullable = false, length = 9)
private String status;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "articleId", referencedColumnName = "id", nullable = false)
private List<Tag> tagList;
// other attributes and methods
}
另外,標籤類有一個名屬性。
我在搜索標籤名稱內的關鍵字時遇到問題。我試過這段代碼:
SELECT DISTINCT a FROM Article a ,IN(a.tagList) tag
WHERE a.status = :status AND
(a.title LIKE :pattern OR a.body LIKE :pattern
OR tag.name LIKE :pattern)
但它沒有給出正確的結果;並非所有文章都顯示出來。
我是迭代的權利,通過與的標籤,或者我需要指定LEFT JOIN?任何幫助將不勝感激。
THX提前
,如果任何人都將面臨這種問題的,這是我的情況
select distinct a from Article a left join a.tagList tag where a.status = :status and
(a.title like :pattern or a.body like :pattern or tag.name like :pattern)
他在FROM子句中使用IN操作符,它是語法正確。 JPA 2.0規範:「集合成員聲明的標識變量是使用特殊運算符聲明的,保留標識符爲IN,IN運算符的參數是集合值路徑表達式。」 – 2011-12-14 07:59:57