検索クエリに問題があります。
私のモデル:
計画:
@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();
}
}
いくつかの検索文字列を使用してプロジェクトを検索したいのですが、この文字列が名前、短い説明、詳細な説明、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();
}
「またはr.name like :search」という行でエラーが発生します(それがなくてもすべて正常に動作します):
java.lang.NullPointerException
myProject.model.Tag.hashCode(Tag.java:53)
このエラーは、いくつかのプロジェクトが見つかった場合にのみ発生します (結果が返されない場合はエラーになりません)。何か案は?ありがとう!
編集: プロジェクトには 0 から n 個のタグがある可能性があることを忘れていました...