【发布时间】:2012-02-12 11:42:27
【问题描述】:
我的搜索查询有问题。
我的模特:
项目:
@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();
}
“or r.name like :search”这行给了我一个错误(没有它一切正常):
java.lang.NullPointerException
myProject.model.Tag.hashCode(Tag.java:53)
只有在找到某些项目时才会出现此错误(没有返回结果时不会出现错误)。 有任何想法吗?谢谢!
编辑:忘记告诉项目可能有 0 到 n 个标签...
【问题讨论】:
-
你为什么不向我们展示真实的代码?错误是
Tag.hashCode(),但您的 Tag 类没有定义任何hashCode()。 -
hashcode() 方法已实现。如果我给你看整个代码,你会哭的。但是我可以添加 hashCode() 方法,这是真的。
标签: mysql hibernate nullpointerexception hql hibernate3