[英]How do I join multiple table in hibernate and call it to a web page?
我有三个表(我不会使用我的真实表而是伪表)
汽车桌
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
...
Car 表的 VIN_ID 作为 PK,ColorCode 作为 FK 到 Reference table Paint.Colorcode Pk,MakeId 作为 FK 到 Reference table 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 值。 请帮忙。
您的实体类存在一些问题。 首先,除非您要显式查询子实体而不是完整的 Car 实体,否则您不需要双向连接(即 Paint/Manufacture 等中没有 Car 实体)。 其次,您在 Car 和 Paint 之间有一个无效的映射。 你应该做这样的事情:
车:
@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}
最后,您真的不应该使用字符串值作为主键和外键。 这可能是一个主要的性能瓶颈,尤其是在连接所述键上的表时。 使用整数值是一种更好的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.