【发布时间】:2011-05-06 14:56:46
【问题描述】:
我的 EJB3 应用程序有以下实体映射,用于映射多对多关系:
@Entity
Crawl{
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.crawl")
public List<Change> changes;
}
@Entity
Change{
@EmbeddedId
ChangePK pk;
@Temporal(javax.persistence.TemporalType.DATE)
Date changeDate;
}
@Embeddable
ChangePK{
@ManyToOne
Crawl crawl;
@ManyToOne
Page page;
}
@Entity
Page{
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.page")
List<Change> changes;
}
我正在尝试获取与抓取相关的所有更改并使用以下命令按日期排序:
this.entityManager
.createQuery("SELECT c FROM Change c WHERE
c.pk.crawl.id = :id
ORDER BY c.changeDate DESC")
.setParameter("id", crawl.getId());
这给了我一个堆栈溢出错误。我相信急切的提取可能与它有关,但在其他所有情况下,我都希望通过爬网加载更改,如果我将提取类型更改为惰性,它将在我的应用程序的其余部分中引起很多问题。
我已经为每个类覆盖了hashCode 和equals 方法。
编辑:
hashcode 和equals 代码:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Crawl other = (Crawl) obj;
if (id != other.id)
return false;
return true;
}
这些是由 Eclipse 生成的,我已经选择了要在其中使用的主键,其他类都使用相同的东西。
【问题讨论】:
-
我会推荐 jpa 或 hibernate 标签而不是其他一些标签(例如,stackoverflowerror 或 ejb)。
-
@bkail 你能解释一下为什么吗?我已经使用 EJB3 注释 (JPA) 4 年了,没有任何问题。
-
@Augusto 我的意思是 stackoverflow.com 问题标签; JPA 或 hibernate 专家可能会错过当前标签集的问题。
-
好的,谢谢,我已经改了。
标签: java hibernate jpa jakarta-ee ejb