多对多映射方法有什么区别

问题描述 投票:1回答:1

我希望使用显式联接表进行多对多关系映射。

我的java spring项目正在以HAL格式提供REST api,现在只有两种类型的分类:

  • 定义的实体和
  • 用于存储库的“空”接口(由@RepositoryRestResource注释)。

旁注,依赖关系大约是这些:

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)。

第一个问题/问题:

我至少看到了三种使用显式联接表建模多对多关系的方法(以便能够对我的关联需求进行建模),而且我不知道区别。 这些方法有什么区别?

  1. 按照Vlad的建议在联接表中使用可嵌入的复合键? https://vladmihalcea.com/the-best-way-to-map-a-many-to-many-association-with-extra-columns-when-using-jpa-and-hibernate/
  2. 使用@IdClass方法,如此处所述:https://stackoverflow.com/a/3588400/11152683
  3. 在连接表中使用多个@Id,如下所示:https://hellokoding.com/jpa-many-to-many-extra-columns-relationship-mapping-example-with-spring-boot-hsql/

第二个问题:在我的案例中,当在原始存储库中提供HAL格式时,需要哪种方法可以轻松地对关联进行建模并使魔力粉发挥作用。我的意思是关系的联系将自动生成。

spring orm spring-data-jpa spring-rest spring-hateoas
1个回答
0
投票

为了使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,似乎是正确的解决方案。

我认为可以将第一种方法修改为与第二种方法类似,但是我暂时无法这样做。

我将为这样的“原因”提供一些见解的任何答案都标记为解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.