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