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