У меня проблема с поисковым запросом.
Моя модель:
Проект:
@Entity
@Table(name = "project")
public class Project {
@Id
@Column(name = "id")
@GeneratedValue
private Integer id;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
name="project_tag",
joinColumns = @JoinColumn(name="project_id"),
inverseJoinColumns = @JoinColumn(name="tag_id")
)
private Set<Tag> requiredSkills;
@Column(name="name")
private String name;
@Column(name = "short_description", columnDefinition="TEXT")
private String shortdescription;
@Column(name = "extended_description", columnDefinition="TEXT")
private String extendedDescription;
}
Метка:
@Entity
@Table(name="tag", uniqueConstraints = {@UniqueConstraint(columnNames={"name"})})
public class Tag {
@Id
@Column(name = "id")
@GeneratedValue
private Integer id;
@Column(name = "name")
private String name;
public int hashCode() {
return getName().hashCode();
}
}
IЯ хочу найти проекты с некоторой строкой поиска, и я хочу найти проекты с этой строкой в имени, кратком описании, расширенном описании и тегах AND.Поиск по тегам - это проблема.
Вот мой запрос:
public List<Project> search(String search) {
search = "%" + search + "%";
Query query = sessionFactory.getCurrentSession().createQuery(
"from Project p" +
" left join fetch p.requiredSkills r" +
" where p.name like :search" +
" or p.shortdescription like :search" +
" or p.extendedDescription like :search" +
" or r.name like :search"
);
query.setParameter("search", search);
query.setMaxResults(30);
return (List<Project>) query.list();
}
Строка "or r.name like: search" выдает ошибку (все работает без нее):
java.lang.NullPointerException
myProject.model.Tag.hashCode(Tag.java:53)
Я получаю эту ошибку только при обнаружении некоторых проектов (нет ошибки, если не возвращены результаты).Есть идеи?Спасибо!
Редактировать: забыл сказать, что проекты могут иметь от 0 до n тегов ...