我正在尝试实现一个应用程序。在这个应用程序中,我有一个实体名称评论,答案,问题。问题,答案和评论有评论,所以我打算创建一个Commentable类,所有三个类都可以扩展Commentable。在这个可评论的类中它保持Set但我不知道这个结构的性能。因为它总是会创建一个连接查询来获取注释。如果我创建一个具有commentedObjectId的单独注释实体并且需要注释时如何在单独的表上进行查询,例如commentedObjectId = id?
class Answer extends Commentable{}
class Comment extends Commentable{}
class Question extends Commentable{}
class Commentable extends BaseModel{
@OneToMany
Set<Comment> comments;
public Set<Comments> getComments() {
return comments;
}
public void setComments(Set<Comment> comments) {
this.comments = comments;
}`
避免连接操作的替代方法。我应该像这样对数据库进行非规范化吗?
class Comment extends BaseModel {
String commentedObjectId;
public String getcommentedObjectId() {
return commentedObjectId;
}
public void setcommentedObjectId(String commentedObjectId) {
this.commentedObjectId = commentedObjectId;
}
}
答案 0 :(得分:0)
你绝对应该使用域对象。 Hibernate允许指定要加入或延迟加载的内容。
要仅加载您的Commentables而不加入评论,您可以使用此查询:
Criteria cirt = session.createCriteria(Commentable.class);
crit.setFetchMode("comments", FetchMode.LAZY);
@SuppressWarnings("unchecked")
List<Commentable> result = crit.list();