Java 如何在hibernate中联接多个表并将其调用到网页?

Java 如何在hibernate中联接多个表并将其调用到网页?,java,sql,spring,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_Cod

我有三个表(我不会使用真实表,而是使用伪表)

车桌

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        
...       
@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...
汽车表的VIN_ID为PK,参考表油漆的颜色代码为FK。颜色代码为PK,参考表Manufacture.Make的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...
制造台

MakeId    
 Audi        
 BMW        
 Chevy        
...       
@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},但是如何在我的jsp中显示POJO类中的car.COLORCODE和car.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值。请帮忙

实体类有几个问题。 首先,除非要显式查询子实体而不是完整的汽车实体,否则不需要双向连接(即油漆/制造等中没有汽车实体)。其次,汽车和油漆之间的映射无效。你应该这样做:

汽车:

您可以从中查询汽车实体:

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}

最后,您真的不应该使用字符串值作为主键和外键。这可能是一个主要的性能瓶颈,尤其是在连接上述键上的表时。使用整数值是一种更好的做法。

是否需要一对一的映射是双向的?感谢您的回复。这篇文章就是一个例子,我很快就把它贴出来了。每个表中我的Pk都是整数序列值。