私はEJB 3.1とJPA 2.0を使用しています。EJBとJPAの設計に関する質問
私は疑問を説明し、良い練習とは何か、何がないのかをヒントとして尋ねます。
私はユーザーファサードであるEJBを持っているとしましょう。ですから、このようなものがあります:
@Stateless
public class UserRepository {
public User find(Long id) {
...do user lookup using entitymanager.
}
}
よしが、今の私はこれからUserエンティティを返すと言わせ、このエンティティは、コメントのコレクション(コメントも実体であることを)持っていること。
私はfindCommentsByUser(Long userId)
メソッドを持つコメントリポジトリを持っている可能性があります。または、ユーザーを取得してgetComments()
メソッドを呼び出すことができます。このケースはシンプルかもしれませんが、私はこの決定に何度も直面しています。
また、コメントを追加したい場合、エンティティが持つコメントコレクションにエンティティを追加し、エンティティをマージするか、addComment(Long userId, Comment newComment)
メソッドを追加する必要がありますか?
私はこれに関するアドバイスやベストプラクティスを探しています。さらに詳しい説明が必要な場合は、お気軽にお問い合わせください。
EDIT:
私が参考にこれまでのコメントを見つけたが、これに気づく、それはユーザーとコメントについては、実際にはありませんが、私はちょうど私の状況を説明することを作りました。両方のアプローチを混在させるのが便利かどうか(私はそうではないと思う)か、もう一方のアプローチよりも優れているかどうかについてです。私は「常にリポジトリを通じて持続する」という提案を好きでした。しかし、私がfetchComments()
リポジトリメソッドとgetComments()
をユーザーエンティティに持つという事実は、同じ機能のエントリポイントを作成するので、どうすれば対処できますか。 また、パフォーマンス(1クエリ対2クエリ)も重要ではありません。なぜなら、ユーザーエンティティもフェッチしているので、実際には何も保存していないからです。