現在、ORMを使用せずに単純なJava Webアプリケーションを開発中です。カスタムORMで遅延ロードする
レイヤードアーキテクチャです。私は注釈を使用して、ドメインクラスのカラムをリポジトリがあるパーシスタンスレイヤにマップします。
私のDefaultRepository
は、リフレクションを使用してフィールド名を取得し、クエリを作成しています。私はちょうど各ドメイン(ユーザー、注文、製品など)ごとに別のものを作る代わりに、この1つを使用します。
それは次のようになります。
リポジトリ:
public abstract class DefaultRepository <TYPE extends DefaultDomain<TYPE>>{
public int insert(Connection con, TYPE entity){};
public int update (Connection con, TYPE entity){};
public int delete (Connection con, TYPE entity){};
public int findById(Connection con, int id){};
...
}
私が要求された場合にのみ、各ユーザの注文をロードするために遅延ロードを実装したいです。これは、好ましくは、結果セットを私のTYPE
(ドメインクラス)にマップするfindById()
のリポジトリで発生します。
私はこの外部キーの関係を、一般的には1対多対多対多に実装する方法はありますか?
考えられるのは、特定のリポジトリを使用して注釈を作成し、その後、オーダーリストが呼び出されたときにfindAll()
メソッドを呼び出すことでした。例えば
:
public class Order extends DefaultDomain{
@ManyToOne(repository=UserRepository.class)
private User user;
}
は正しい方法ということですか?これには異なる/より良いアプローチがありますか?
あなたはORMを使用しています。自分で書くことを選択しています。あなたが書いたアノテーションは、JPAが使用する注釈です。 – duffymo
ありがとう、私はそれを貧弱に言いました。私はJPA/Hibernateがどのようにこれをやっているのか調べてみましたが、コードワイズなものは見つけられませんでした。 – user9136913
あなたは @ManyToOne(= FetchType.LAZYをフェッチ) – Mazen