【发布时间】:2011-10-05 15:19:11
【问题描述】:
我正在使用 EJB 3.1 和 JPA 2.0。
我会给你一个例子来解释我的疑虑,并寻求提示,什么是好的做法,什么不是。
假设我有一个作为用户外观的 EJB。所以你有这样的东西:
@Stateless
public class UserRepository {
public User find(Long id) {
...do user lookup using entitymanager.
}
}
好的,现在假设我从这里返回 User 实体,并且该实体有一个 cmets 集合(Comment 也是一个实体)。
我可以有一个带有findCommentsByUser(Long userId) 方法的评论存储库,或者我可以获取用户并调用getComments() 方法。可能这种情况很简单,但我多次面临这个决定,有时不知道什么是最好的。
另外,假设我要添加评论,我应该将其添加到实体拥有的评论集合中并合并实体,还是应该使用addComment(Long userId, Comment newComment) 方法?
我正在寻找有关这方面的建议或最佳做法。如果您需要进一步的说明,请随时询问。
编辑:
到目前为止,我发现 cmets 很有帮助,但是请注意,这实际上与用户和 cmets 无关,我只是为了解释我的情况而编造的。这是关于混合两种方法是否方便(我认为不是),还是一种比另一种更好。我喜欢“始终坚持通过存储库”的建议。但是我有一个fetchComments() 存储库方法和用户实体中的getComments() 的事实创建了相同功能的入口点,那么我该如何处理呢?
此外,性能(1 个查询与 2 个查询)也不是很重要,因为我也会获取用户实体,所以我实际上并没有保存任何东西。
【问题讨论】:
标签: java design-patterns jpa ejb