我希望使用显式联接表进行多对多关系映射。
我的java spring项目正在以HAL格式提供REST api,现在只有两种类型的分类:
旁注,依赖关系大约是这些:
spring-boot-starter-parent
spring-boot-starter-data-jpa
spring-boot-starter-data-rest
spring-data-rest-hal-browser
postgresql / h2
spring-boot-starter-hateoas
表之间的关系(我是说_res剩余资源的链接。例如,查看sample hal+json文档,并查找ea:basket
。)正在按预期方式工作,并且它是“免费”运行的,因为春季产生了魔力自动配置和其他魔术。
现在在添加新的多对多依赖项时我很挣扎。
我有实体A,B和标签。我想让任意数量的Tag实体与A和B实体相关联。我不需要在A和B实体中有任何列表/集合(如果我需要除crud以外的其他东西,我将使用jooq)。
第一个问题/问题:
我至少看到了三种使用显式联接表建模多对多关系的方法(以便能够对我的关联需求进行建模),而且我不知道区别。 这些方法有什么区别?:
第二个问题:在我的案例中,当在原始存储库中提供HAL格式时,需要哪种方法可以轻松地对关联进行建模并使魔力粉发挥作用。我的意思是关系的联系将自动生成。
为了使many2many关联与spring数据其余部分很好地配合并为HAL表示提供正确的内容,首先您需要了解一些JPA / Hibernate。有两种方法(第一种和第二种是问题,第三种只是第二种的快捷方式,并且只能在Hibernate中工作。)
这两种方法都在概念证明repository in tags branch中显示。我使用给定的存储库来测试项目的各种设置。
方法1,EmbeddedId。它确实在BackendIdConverter Bean的FixConfig类中使用了骇人的东西,当它将来自URL的请求ID解析为可嵌入的ID类时,在其中使用bookRepository获取Book实体。
方法2,IdClass。它使用普通的Intgers int IdClass,似乎是正确的解决方案。
我认为可以将第一种方法修改为与第二种方法类似,但是我暂时无法这样做。
我将为这样的“原因”提供一些见解的任何答案都标记为解决方案。