4

feature-a.jar、feature-b.jarなどの個別のjarにパッケージ化された機能によって、アプリケーションをモジュールに分割しようとしています。

feature-a.jarなどの個々の機能jarには、jpaエンティティ、ビジネスロジック、REST API、単体テスト、統合テストなどを含む、機能のすべてのコードが含まれている必要があります。

私が遭遇している問題は、JPAエンティティ間の双方向の関係がjarファイル間の循環参照を引き起こすことです。たとえば、Customerエンティティはcustomer.jarにあり、Orderはorder.jarにある必要がありますが、Customerはorderを参照し、orderはcustomerを参照するため、個別のjar/eclipseプロジェクトに分割するのは困難です。

JPAエンティティの循環依存関係を処理するために私が見るオプション:

  • オプション1:すべてのエンティティを1つのjar/1つのプロジェクトに配置します
  • オプション2:プロジェクト間の循環依存を回避するために、特定の双方向関係をマップしないでください。

質問:

  • 双方向マッピングを実行するタイミングと実行しないタイミングを決定するために、どのようなルール/原則を使用しましたか?
  • jpaエンティティを機能ごとに独自のプロジェクト/jarに分割できましたか?そうであれば、循環依存の問題をどのように回避しましたか?
4

1 に答える 1

2

で循環参照を決定するために使用したルールはありませんJPA。私もそれをテストする必要があります。

私の例では、toとtoが双方向であるエンティティCategoryがあります。OneToOneparentCategoryOneToManychildCategories

Circular Reference 以下のようなデータ構造だと思います。

CategoryID      Name    ParentID
001             AAA     002
002             BBB     003
003             CCC     004
004             DDD     001

どちらが問題を避けるべきかを提案したいと思います。

例 :

public void addNewCategory(Category category) {
    checkCircularity(Category category, category.getParent());
}


public static void checkCircularity(Category child, Cagegory parent) throws CircularReferenceException {
    if (superior != null) {
        if (sub.isEqual(superior) || sub.isEqual(parent.getParent())) {
            throw new CircularReferenceException("Circularity Referencing.........");
        } else if (finder.getSuper(superior) != null) {
            checkCircularity(child, parent.getParent());
        }
    }
}

プログラムが をスローしない場合、そのインスタンスCircularReferenceExceptionの循環参照はありません。Category

于 2012-12-11T07:45:59.770 に答える