我正在创建一个有文章的网站;每篇文章都会有评论。这些注释将存储在“注释”表中,其中包含一个名为“parent_id”的字段,该字段是同一表中字段“id”的外键。
我希望使用Hibernate以递归方式获取特定文章的所有注释。
这是我的实体:
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 + " " + "]";
}
}
代码“有点”工作,但是,当检索到所有注释时,“子”注释列表包含与总注释相同数量的元素(如果有意义的话。例如,假设我有对于id为1的文章,表中只有三条评论...这篇文章有2条评论,其中一条评论有一条子评论..带有子评论的数组有3个条目,前两个是空的,最后一条是孩子的评论。
这段代码是否正确?
答案 0 :(得分:2)
我想知道问题是不是来自您使用PK列作为索引列这一事实。我建议为索引列使用专用列。像这样:
@OneToMany
@JoinColumn(name="parent_id")
@IndexColumn(name="comments_index", base=0)
private List<Comment> comments = new ArrayList<Comment>();
你可以尝试一下吗?