【发布时间】:2011-03-12 02:21:19
【问题描述】:
我正在创建一个包含文章的网站;每篇文章都会有cmets。这些 cmets 将存储在一个“comment”表中,其中包含一个名为“parent_id”的字段,该字段是同一表中字段“id”的外键。
我希望使用 Hibernate 递归地获取特定文章的所有 cmets。
这是我的实体:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import org.hibernate.annotations.IndexColumn;
@Entity
public class Comment implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@ManyToOne
@JoinColumn(name="user_id")
private User user;
@OneToMany(targetEntity=Comment.class)
@JoinColumn(name="parent_id")
@IndexColumn(name="id", base=0)
private List<Comment> comments = new ArrayList<Comment>();
@Column(name="article_id", length=10)
private int articleId;
@Column(name="text", length=8192)
private String text;
public int getArticleId() {
return articleId;
}
public void setArticleId(int articleId) {
this.articleId = articleId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Comment [" + "articleId " + articleId + " " + "id " + id + " " + "text " + text + " " + "]";
}
}
代码“有点”工作,但是,当检索到所有 cmets 时,cmets 的“子”列表包含与总 cmets 相同数量的元素(如果这有意义的话。例如,假设我有ID 为 1 的文章的表中只有三个 cmets...这篇文章有 2 个 cmets,其中一个 cmets 有一个子评论。带有子评论的数组有 3 个条目,前 2 个为空,最后一个是子评论。
这段代码正确吗?
【问题讨论】: