【问题标题】:Java - Spring Boot - Mysql / Java - Get type of vehicle from a column of a table and get their total count(QUANTITY) from another tableJava - Spring Boot - Mysql / Java - 从表的列中获取车辆类型并从另一个表中获取它们的总数(QUANTITY)
【发布时间】:2017-12-22 07:41:48
【问题描述】:

这是我想要做的场景: 有两个表:带有列的车辆表:车辆类型、品牌。以及带有列的出货表:desc、vehicleType、date_delivered、date_dispatched。

我想从车辆表中获取所有车辆类型,并获取他们在运输表中完成的运输总数。但问题是,我不知道该怎么做。

Shipment.java

    package com.pahrsek.smartfleet.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;


/**
 * Delivery of goods
 * @author JRDomingo
 *
 */
@Entity
@Table(name="shipment")
public class Shipment {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long id;

    @Column(name="booking_number",unique=true)
    public String bookingNumber;

    @Column(name="wb_number")
    public String wbNumber;

    @ManyToOne
    @JoinColumn(name="vehicle_id", referencedColumnName="id")
    public Vehicle vehicle;

    @ManyToOne
    @JoinColumn(name="customer_id", referencedColumnName="id")
    public Customer customer;

    public String origin;

    public String depot;

    @ManyToOne
    @JoinColumn(name="vendor_id", referencedColumnName="id")
    public Vendor vendor;

    public String type;

    @Column(name="commodity_type")
    public String commodityType;

    @Column(name="truck_type")
    public String truckType;

    @Enumerated(EnumType.STRING)
    public Status status;

    @Column(name="delivery_date")
    public Date deliveryDate;

    @Column(name="fuel_po")
    public String fuelPo;

    @Column(name="client_ref_no")
    public String clientReferenceNumber;

    public String remarks;

    @ManyToOne
    @JoinColumn(name="driver_id",referencedColumnName="id")
    public Personnel driver;

    @ManyToOne
    @JoinColumn(name="helper1_id",referencedColumnName="id")
    public Personnel helper1;

    @ManyToOne
    @JoinColumn(name="helper2_id",referencedColumnName="id")
    public Personnel helper2;


    public enum Status{
        New, Dispatched, Delivered, Completed, Cancelled
    }

    /******
     * ACTUAL DATES IMPLEMENTED
     ******/
    @Column(name="date_created")
    public Date dateCreated;

    @Column(name="date_dispatched")
    public Date dateDispatched;

    @Column(name="date_completed")
    public Date dateCompleted;

    @Column(name="date_cancelled")
    public Date dateCancelled;

    @Column(name="date_received")
    public Date dateReceived;

    @Column(name="farthest_destination")
    public String farthestDestination;

    @Column(name="client_rate")
    public Double clientRate;

    @Column(name="is_sub_con")
    public boolean isSubCon;

    @Column(name="sub_con_rate")
    public Double subConRate;

    @Column(name="fuel")
    public Double fuel;

    @Column(name="fuel_amount")
    public Double fuelAmount;

    @Column(name="route_code")
    public String routeCode;

    @ManyToOne
    @JsonIgnore
    @JoinColumn(name="dispatched_odometer_id",referencedColumnName="id")
    public RegularOdometerUsage dispatchedOdometer;

    @ManyToOne
    @JsonIgnore
    @JoinColumn(name="delivered_odometer_id",referencedColumnName="id")
    public RegularOdometerUsage deliveredOdometer;

    @ManyToOne
    @JsonIgnore
    @JoinColumn(name="completed_odometer_id",referencedColumnName="id")
    public RegularOdometerUsage completedOdometer;


    /**
     * index 0 = Driver , index 1 = Helper1, index 2 = Helper2
     */
    @JsonIgnore
    @OneToMany(mappedBy="shipment",targetEntity=PersonnelRate.class)
    public List<PersonnelRate> personnelRates = new ArrayList<PersonnelRate>();

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name="company_id", referencedColumnName="id")
    public Company company;


    @JsonIgnore
    @ManyToOne
    @JoinColumn(name="prepared_user_id", referencedColumnName="id")
    public User preparedBy;


    @JsonIgnore
    @ManyToOne
    @JoinColumn(name="customer_invoice", referencedColumnName="id")
    public CustomerInvoice customerInvoice;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name="trucker_settlement", referencedColumnName="id")
    public TruckerSettlement truckerSettlement;

}

【问题讨论】:

  • 你有这两个表之间的任何映射
  • 我只是在使用 Spring JPA 存储库。
  • 分享您的实体详情

标签: java mysql spring-boot


【解决方案1】:

使用 COUNT() 和 GROUP BY 按车辆类型将它们组合在一起

SELECT
 vehicle.vehicleType,
 count(shipment.id) as totalShipment
FROM
 Vehicle as vehicle
INNER JOIN Shipment as shipment ON shipment.vehicleType = vehicle.vehicleType group by vehicle.vehicleType 

【讨论】:

  • 感谢您的回答先生,但我的意思是像这个车辆表:车辆类型 = TRUCK、VAN、CAR、TRAILER。装运表:vehicletype=VAN, desc=deliver Items vehicletype=TRUCK, desc=movers rent vehicletype=VAN, desc=camping trip vahicletype=TRUCK, desc=deliver items
  • @cleem 你能分享实体映射以便我更好地了解吗?
  • @cleem 在您的 JPA 存储库中使用此查询,您将获得带有为此 vehicleType 完成的 totalShiment 数量的车辆类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多