java如何在hibernate中连接多个表并将其调用到网页?
我有三个表(我不会使用真实表,而是使用伪表)
车桌
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,颜色代码为FK,参考表油漆。颜色代码Pk和MakeId为FK,用于参考表制造。制造
这是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类到我的jsp的MAKEID值。他们正在使用对象来定义变量
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值。请帮忙
# 1 楼答案
实体类有几个问题。 首先,除非要显式查询子实体而不是完整的汽车实体,否则不需要双向连接(即油漆/制造等中没有汽车实体)。其次,汽车和油漆之间的映射无效。你应该这样做:
汽车:
您可以从中查询汽车实体:
您可以通过JSTL中的Car实体访问所需的值:
最后,您真的不应该使用字符串值作为主键和外键。这可能是一个主要的性能瓶颈,尤其是在连接上述键上的表时。使用整数值是更好的做法