我在一个小项目涉及游戏Re-Volt(1999),我试图使一个网页,你可以看到所有的汽车与他们的细节(图像,引擎类型,评级,速度等)。我有一个表cars
,我前面提到的信息,它看起来像这样:
CREATE TABLE public.cars (
id integer NOT NULL,
name character varying(25),
thumbnail_id integer,
engine_id integer,
rating_id integer,
speed integer,
acc numeric,
mass numeric
);
我正在使用Hibernate和SpringBoot,PostgreSQL用于数据库,Thymeleaf用于在Web页面中显示数据。但现在我想将cars
与cars.thumbnail_id = thumbnails.id
上的表thumbnails
连接起来,并显示表thumbnails
中的列image
,而不是thumbnails_id
。下面是我的thumbnails
表:
CREATE TABLE public.thumbnails (
id integer NOT NULL,
image character varying(50)
);
这些是我的实体:
第一次
我不知道如何正确地编写join
。我目前的代码Hibernate在匹配行时不考虑thumbnail_id
的值,它只是执行“car_1 = thumbnail_1”,即使“car_1”的“thumbnail_id”等于12,它仍然匹配第一个缩略图,而不是第12个。有人能帮我吗?
编辑:基本上,我试图通过Hibernate实现的是下面的SQL查询:
SELECT c.name, t.image, c.engine_id, c.rating_id, c.speed, c.acc, c.mass
FROM cars c
JOIN thumbnails t
ON c.thumbnails_id = t.id;
2条答案
按热度按时间wvmv3b1j1#
汽车实体
缩略图实体
由于您希望实现通过连接进行选择,并且在一对一关联N+1问题不允许您这样做的情况下,您需要按如下方式修改存储库以添加EntityGraph
这将确保您的缩略图数据是通过join而不是通过多个select语句获取的。
1.您可以在控制台中看到生成的查询
休眠模式:
1.您可以在API响应中看到结果。
1.您可以在数据库中看到示例数据
汽车-
缩图-
kx7yvsdv2#
多亏了你的注解,我才能让它正常工作。我所做的就是在
@JoinColumn
注解中提到thumbnail_id
(多亏了@blau注解),并添加@MapsId("id")
(多亏了@Mahesh注解)。这就是我在Car.java
类中所做的: