我有三个表(我不会使用真实的表,而是使用伪表)
汽车表
Vin_ID ColorCode MakeId Model
123 qwer Audi A7
456 asdf BMW M5
789 qwer Audi S7
369 cvbn Chevy C9
... ... ... ...
油漆台
Color_Code Color MakeId
qwer Black Audi
asdf Red BMW
qwer Black Audi
cvbn White Chevy
... ... ...
制造表
MakeId
Audi
BMW
Chevy
...
汽车表的 VIN_ID 作为 PK,ColorCode 作为 FK 到引用表 Paint.Colorcode Pk,MakeId 作为 FK 到引用表 Manufacture.Make。
这是 pojo 类
@Entity
@Table(name="car")
public class Car {
@Id
@JoinColumn(name="vin_id")
private Paint paint;
@OneToOne
@Column(name="colorcode")
private String colorCode;
@OneToOne
@JoinColumn(name="makeid")
private Manufacture manufacture;
@Column(name="model")
private String model;
...constructor and getters and setter...
绘画类
@Entity
@Table(name="paint")
public class Paint {
@Id
@Column(name="colorcode")
private String colorCode;
@Column(name="color")
private String color;
@Column(name="makeid")
private String makeId;
@OneToOne(mappedBy="colorcode")
private Car car;
....Constructor and setters and getter...
制造表
@Entity
@Table(name="manufacture")
public class Manufacture {
@Id
@Column(name="Makeid")
private String MakeId;
@OneToOne(mappedBy="makeid"
private Car car;
....Constructor and setters and getter...
如何在我的 DAO 类中创建 3 个表的联接查询(例如下面的示例)并将结果获取到 jsp 页面上。如果我想在我的jsp页面中显示vinId,则非常简单${car.vinId},但是如何将POJO类中的CAR.COLORCODE和CAR.MAKEID值显示到我的jsp中。他们使用对象来定义变量?
SELECT C. VINID, P.COLOR, M.MAKEID, C.MODEL
FROM CAR C
JOIN PAINT P ON P.COLORCODE = C.COLORCODE
JOIN MANUFACTURE M ON M.MAKEID = C.MAKEID
我想在jsp上显示C.VINID、P.COLOR、M.MAKEID、C.MODEL值。请帮忙。
最佳答案
您的实体类存在一些问题。 首先,除非您要显式查询子实体而不是完整的汽车实体,否则不需要双向连接(即油漆/制造等中没有汽车实体)。其次,汽车和油漆之间的映射无效。你应该做这样的事情:
汽车:
@Entity
@Table(name="car")
public class Car {
@Id
@Column(name = "vin_id")
private int vinId;
@OneToOne
@JoinColumn(name="colorcode")
private Paint paint;
@OneToOne
@JoinColumn(name="makeid")
private Manufacture manufacture;
@Column(name="model")
private String model;
...constructor and getters and setter...
从中您可以查询 Car 实体:
Query q = em.createQuery("select c from Car where c.vinId = :id");
q.setParameter("id", 1234567890123456);
Car c = q.uniqueValue();
您可以通过 JSTL 中的 Car 实体访问您想要的值:
${car.vinId}
${car.paint.colorCode}
${car.manufacture.Makeid}
最后,您确实不应该使用字符串值作为主键和外键。这可能是一个主要的性能瓶颈,尤其是在按所述键连接表时。使用整数值是更好的做法。
关于java - 如何在 hibernate 中连接多个表并将其调用到网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59293530/