gpt4 book ai didi

java - EJB 和 JPA 设计问题

转载 作者:行者123 更新时间:2023-12-02 13:25:12 24 4
gpt4 key购买 nike

我正在使用 EJB 3.1 和 JPA 2.0。

我会给你一个例子来解释我的疑问,并寻求提示什么是好的做法,什么不是。

假设我有一个 EJB,它是一个用户外观。所以你有这样的东西:

@Stateless
public class UserRepository {

public User find(Long id) {
...do user lookup using entitymanager.
}

}

好吧,现在假设我从中返回 User 实体,并且该实体具有评论集合(Comment 也是一个实体)。

我可以拥有一个带有 findCommentsByUser(Long userId) 方法的评论存储库,或者我可以获取用户并调用 getComments() 方法。也许这个案例很简单,但我多次面临这个决定,有时不知道什么是最好的。

另外,假设我想添加评论,我应该将其添加到实体拥有的评论集合中并合并实体,还是应该使用 addComment(Long userId, Comment newComment)方法?

我正在寻找与此相关的建议或最佳实践。如果您需要进一步说明,请随时询问。

编辑:

到目前为止,我发现这些评论很有帮助,但是请注意,这实际上与用户和评论无关,我只是为了解释我的情况而编造的。这是关于混合两种方法是否方便(我认为不是)或者一种方法优于另一种方法的问题。我喜欢“始终坚持通过存储库”的建议。但事实上,我有一个 fetchComments() 存储库方法,并且用户实体中的 getComments() 创建了相同功能的入口点,那么我该如何处理那?。此外,性能(1 个查询与 2 个查询)并不重要,因为我也会获取用户实体,所以我实际上并没有保存任何内容。

最佳答案

我们通常只使用应用程序中的独立实体,因此我们有一个数据访问管理器来获取和更新实体。然后我们知道,除非特别要求,否则我们在业务逻辑中所做的任何事情都不会被持久化。我还会使用用户实体获取评论,但确保在显式调用之前不会保留它。

关于java - EJB 和 JPA 设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6698734/

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