我正在尝试通过打包到feature-a.jar,feature-b.jar等单独的jar中的功能将我的应用程序划分为模块。
feature-a.jar等个别功能包应该包含功能的所有代码,包括jpa实体,业务逻辑,rest apis,单元测试,集成测试......等等。
我遇到的问题是JPA实体之间的双向关系导致jar文件之间的循环引用。例如,客户实体应该在customer.jar中,订单应该在order.jar中,但客户引用订单和订单引用客户,这使得很难将它们拆分成单独的jar / eclipse项目。
我在处理JPA实体中的循环依赖关系时看到的选项:
问题:
答案 0 :(得分:2)
您在JPA
中没有用于决定循环引用的规则。我也要测试它。
在我的示例中,有一个实体Category
,其中OneToOne
到parentCategory
和OneToMany
到childCategories
为双向。
我认为,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
实例没有循环引用。