栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring Data JPA - create @Composite key for the three tables

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Data JPA - create @Composite key for the three tables

好吧,我知道您的意思,但我认为这不是您的意思。你说

实际上,我有三个表,库存,类别和产品。@ManyToMany库存与类别之间的关系,以及@ManyToMany
类别与产品之间的关系。

这有助于抽象地考虑这一点。用陈记法说的是

但是,这可能不是您的意思。这是有问题的,因为您
将需要Category为每个StockandProduct
关系建立一个新的实体。因此,如果您有一个ETF类别,那么
BobsBestETFs产品中的每个股票(实际上是每个实例化关系)都将复制它。

您的意思可能更像是通过aStock和Product与Category属性的关系。

这允许许多产品都有很多库存,并且每种产品/库存关系都有特定的类别属性。您将遇到的问题
是,您不想Category成为一个属性,而是想要一个类别的查找表,如下所示:

我想这就是您要寻找的。
使用复合ID实施起来应该相当简单,但是您显示的示例似乎
有些过时或不清楚。最好找到更好的例子。这就是我
对最后一个架构进行建模的方式。

@Entitypublic class Stock {    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;}@Entity@Datapublic class Product {    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;}@Entitypublic class Category {    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;}@Entity@Datapublic class StockProduct {    @EmbeddedId    private StockProductPk id;    @ManyToOne    @MapsId("productId")    private Product product;    @ManyToOne    @MapsId("stockId")    private Stock stock;    @ManyToOne    private Category category;}@Embeddable@Datapublic class StockProductPk implements Serializable {    private static final long serialVersionUID = 1L;    private Long stockId;    private Long productId;}

And as an example to use it:

private void create() {    Category catEtf = new Category();    categoryRepo.save(catEtf);    Stock s1 = new Stock();    stockRepo.save(s1);    Product bobEtfs = new Product();    productRepo.save(bobEtfs);    // create a relationship    StockProduct bs1 = new StockProduct();    bs1.setId(new StockProductPk());    bs1.setProduct(bobEtfs);    bs1.setStock(s1);    bs1.setCategory(catEtf);    stockProductRepo.save(bs1); }private void read() {    StockProduct sp1 = new StockProduct();    Product p1 = new Product();    p1.setId(1L);    sp1.setProduct(p1);    List<StockProduct> bobEtfs = stockProductRepo.findAll(Example.of(sp1, ExampleMatcher.matching()));    System.out.println(bobEtfs);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号