繁体   English   中英

如何在休眠中加入多个表并将其调用到网页?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM