如何获取n:m张表?

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

我有一个带有 MySql 数据库的 spring-boot 应用程序。我在披萨表和配料表之间存在多对多关系,因此我制作了一个额外的表来存储这些关系。表格:

CREATE TABLE topping 
(
    id SERIAL PRIMARY KEY,
    topping_name VARCHAR(64) NOT NULL,
    price INT NOT NULL,
    spicy bool NOT NULL
);

CREATE TABLE pizza 
(
    id SERIAL PRIMARY KEY,
    pizza_name VARCHAR(64) NOT NULL
);

CREATE TABLE pizza_with_topping 
(
    pizza_id BIGINT UNSIGNED NOT NULL,
    topping_id BIGINT UNSIGNED NOT NULL,
    CONSTRAINT pizza_with_topping_ibfk_1
    FOREIGN KEY(pizza_id)
        REFERENCES pizza(id),
    CONSTRAINT pizza_with_topping_ibfk_2
    FOREIGN KEY(topping_id)
        REFERENCES topping(id)
);

在 spring-boot 中,我发现我必须扩展 CrudRepository 接口,并且我可以从中调用

findAll()
方法来获取表的内容。目前我得到了所有 3 个表的内容,如下所示:

Iterable<Pizza> pizzasInDb = pizzaRepository.findAll();
Iterable<Topping> toppingsInDb = toppingRepository.findAll();
Iterable<PizzaWithTopping> pizzaToppingConnectionTable = pizzaWithToppingRepository.findAll();

在此之后,我根据这 3 个表手动创建包含披萨名称及其配料的对象。由于我在

pizza_with_topping
表中设置了外键,我想知道是否有更好的方法来获取此模型?

也许通过调用内置函数,可以根据外键自动为我创建此模型对象。

java spring-boot
1个回答
1
投票

是的,有。您可以使用 JPA 通过多对多关系对域进行建模。如果您使用注释,则可以使用 @ManyToMany 来实现 有一个例子这里

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