Java 处理JPA关系引起的循环引用的策略?
我试图通过打包到单独jar中的特性将我的应用程序划分为模块,如feature-a.jar、feature-b.jar等等。。。等等 诸如feature-a.jar之类的单个特性jar应该包含特性a的所有代码,包括jpa实体、业务逻辑、RESTAPI、单元测试、集成测试。。。等等 我遇到的问题是JPA实体之间的双向关系导致jar文件之间的循环引用。例如,客户实体应该在Customer.jar中,订单应该在Order.jar中,但是客户引用了Order,订单引用了Customer,这使得很难将它们拆分为单独的jar/eclipse项目 我看到的处理JPA实体中循环依赖关系的选项:Java 处理JPA关系引起的循环引用的策略?,java,jpa,module,packaging,Java,Jpa,Module,Packaging,我试图通过打包到单独jar中的特性将我的应用程序划分为模块,如feature-a.jar、feature-b.jar等等。。。等等 诸如feature-a.jar之类的单个特性jar应该包含特性a的所有代码,包括jpa实体、业务逻辑、RESTAPI、单元测试、集成测试。。。等等 我遇到的问题是JPA实体之间的双向关系导致jar文件之间的循环引用。例如,客户实体应该在Customer.jar中,订单应该在Order.jar中,但是客户引用了Order,订单引用了Customer,这使得很难将它们拆
- 选项1:将所有实体放在一个jar/一个项目中
- 选项2:不要映射某些双向关系以避免项目之间的循环依赖关系李>
- 您使用了哪些规则/原则来决定何时进行双向映射李>
- 您是否能够通过特性将jpa实体分解为它们自己的项目/jar?如果是这样,您如何避免循环依赖性问题李>
JPA
中没有用于决定循环引用的规则。我还得测试一下
在我的示例中,有一个实体Category
,它将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());
}
}
}
如果程序没有抛出
循环引用异常
,则该类别
实例没有循环引用。Franky,如果实体都是同一应用程序的一部分,我看不出将实体拆分成几个JAR会带来什么,除了额外的复杂性。这不是我所要寻找的,我关心的是java类之间的循环,而不是数据库中的数据。我仍然觉得您的解决方案很有用,所以我对它投了赞成票。@ams数据库的每个数据都代表每个java实例