有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

    汽车:

    @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...
    

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

    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}
    

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