我试图通过打包到feature-a.jar,feature-b.jar等单独的jar中的功能将我的应用程序划分为模块.
各个功能jar(例如feature-a.jar)应包含功能的所有代码,包括jpa实体,业务逻辑,rest apis,单元测试,集成测试……等.
我遇到的问题是JPA实体之间的双向关系导致jar文件之间的循环引用.例如,Customer实体应该在customer.jar中,Order应该在order.jar中,但客户引用订单和订单引用客户,这使得很难将它们拆分成单独的jar / eclipse项目.
我看到的用于处理JPA实体中的循环依赖关系的选项:
>选项1:将所有实体放入一个jar /一个项目中
>选项2:不要映射某些双向关系以避免跨项目的循环依赖关系.
问题:
>您使用什么规则/原则来决定何时进行双向映射?
>您是否能够通过功能将jpa实体分解为自己的项目/ jar?如果是这样,您是如何避免循环依赖性问题的?
最佳答案 您以前没有规则来决定JPA中的循环引用.我也要测试它.
在我的示例中,有一个实体类别,其中OneToOne为parentCategory,OneToMany为childCategories为双向.
我认为,循环参考如下数据结构.
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实例没有循环引用.