java - 如何在 hibernate 中连接多个表并将其调用到网页?

标签 java sql spring 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,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/

相关文章:

mysql - 将文件关联到数据库任何表中的任何行

java - 在 Spring Security OAuth2 实现中成功设置 cookie

java - 设置Spring-Data-Neo4j独立应用程序导致无法加载ApplicationContext

java - WhatsApp 如何检测联系人列表中的谁使用了该应用程序?

java - 如何通过config.properties从pom.xml获取参数值

sql - 是否可以从 clickhouse 表中删除旧记录?

mysql - 如果表不存在则创建表,如果表存在则在创建之前删除表之间有什么区别?

java - 未找到类异常

java - 创建 googleApiClient 导致 android 应用程序崩溃

java - 使用分布式编程的字符计数