Я пытаюсь найти ключевое слово в заголовках статей, телах и именах тегов, используя выражение LIKE. Статьи и теги определяются с использованием отношения один ко многим
Вот фрагмент кода из моего класса:
@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
}
Также класс Tag имеет атрибут name .
У меня проблемы с поиском ключевого слова в именах тегов. Я пробовал этот код:
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)
но это не дает должного результата; не все статьи показаны.
Итерирую ли я по тегам IN или мне нужно указать LEFT JOIN ? Любая помощь будет оценена.
спасибо заранее
если кто-то столкнется с такой проблемой, это решение отлично подойдет для моего случая
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)