gpt4 book ai didi

mysql - 只保留实体 id 而不是 Set 来减少连接操作是个好主意吗

转载 作者:行者123 更新时间:2023-11-29 19:31:37 26 4
gpt4 key购买 nike

我正在尝试实现一个应用程序。在此应用程序中,我有一个实体名称评论、答案、问题。问题、答案和评论都有评论,所以我计划创建一个 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;
}
}

最佳答案

你绝对应该使用域对象。 Hibernate 允许指定要加入或延迟加载的内容。

要仅加载您的可评论内容而不加入评论,您可以使用以下查询:

Criteria cirt = session.createCriteria(Commentable.class);
crit.setFetchMode("comments", FetchMode.LAZY);

@SuppressWarnings("unchecked")
List<Commentable> result = crit.list();

关于mysql - 只保留实体 id 而不是 Set<Entity> 来减少连接操作是个好主意吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41745278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com