我有一个带有 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
表中设置了外键,我想知道是否有更好的方法来获取此模型?
也许通过调用内置函数,可以根据外键自动为我创建此模型对象。
是的,有。您可以使用 JPA 通过多对多关系对域进行建模。如果您使用注释,则可以使用 @ManyToMany 来实现 有一个例子这里