gpt4 book ai didi

JPA:实体 X 与自身存在单对多关系。如何?

转载 作者:行者123 更新时间:2023-12-04 06:42:56 26 4
gpt4 key购买 nike

我有一个实体电话 CommentComment+ ID(PK)
+ fromUserId
+ 目标 ID
+ replyId :这是 的外键id

这个想法是 comment可以有很多回复,但是一个 reply也是comment .为了区分两者,comment将有 replyId等于 -1,同时 reply replyId 的值将非 -1 .最终,我想要的是Comment有一个 List像这样

List<Comment> replyList;  //So each comment will store all their replies into this List

在JPA中,我完成了 OneToMany两个实体之间的关系,我在 @OneToMany 的帮助下创建了一个列表和 @ManyToOne注释,但在这种情况下,我不确定如何完成此操作。请帮忙

编辑
他们以我创建评论的方式 - 回复布局是将一个 dataTable 放在另一个里面
<h:form id="table">
<p:dataTable value="#{bean.comments}" var="item">
<!-- Original Comment -->
<p:column>
<h:outputText value="#{item.comment}" />
</p:column>

<!-- Reply -->
<p:column>
<p:dataTable value="#{item.replies}" rendered="#{item.replies.size() > 0}" var="item2">
<!-- Print out replies in here -->
<h:outputText value="#{item2.comment}" />
</p:dataTable>

<!-- Text box and commandButton so user can add new reply -->
<h:inputTextarea value="#{...}" />
<p:commandButton value="Post" actionListener="#{bean.addReply(item)}" />
<!-- Assume that I got this working, that a new Comment with correct REPLYTO_ID set -->
</p:column>
</p:dataTable>
</h:form>

这是我的问题。当我输入回复并点击 Post ,它正确地在我的数据库中创建了一个项目条目,然后召回 getReplies() .我当时假设, replies.size() == 1 ,然而 replies.size()等于 0。因此我什么也看不到。我必须刷新页面,才能看到它显示正确。我在这里看到了问题,因为我通过 #{item.replies} 生成了第二个表的值,因此如果 item不是最新的,那么 replies不是最新的。不确定这是 JSF 还是 JPA 问题

最佳答案

您可以像这样映射自引用实体:

@Entity
public class Comment {
@Id
private Long id;

@ManyToOne(optional=true, fetch=FetchType.LAZY)
@JoinColumn(name="REPLYTO_ID")
private Comment replyTo;

@OneToMany(mappedBy="replyTo")
private List<Comment> replies = new ArrayList<Comment>();

//...

// link management method
public void addToComments(Comment comment) {
this.comments.add(comment);
comment.setParent(parent);
}
}

凡根 Comment没有 replyTo .

PS:一定要正确设置双向关联。

关于JPA:实体 X 与自身存在单对多关系。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029638/

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