2013-03-22 90 views
0
CREATE TABLE project(
    Id int auto_increment primary key, 
    Name char(50) NOT NULL 
)ENGINE = InnoDB; 

CREATE TABLE car(
    Id int auto_increment primary key, 
    ProjectId int(11) NOT NULL, 
    Plate char(10) NOT NULL, 
    Latitude varchar(50) DEFAULT '-6.221165', 
    Longitude varchar(50) DEFAULT '106.833286', 
    LastTemp varchar(20) DEFAULT '0', 
    LastSpeed varchar(20) DEFAULT '0', 
    LastGap double DEFAULT 0, 
    Mileage double DEFAULT 0, 
    CONSTRAINT fk_car_project FOREIGN KEY(ProjectId)REFERENCES project(Id) ON UPDATE CASCADE 
)ENGINE = InnoDB; 

CREATE TABLE car_log(
    Id int auto_increment primary key, 
    CarId int NOT NULL, 
    Latitude varchar(50), 
    Longitude varchar(50), 
    Temp varchar(20), 
    Speed varchar(20), 
    Gap double DEFAULT 0, 
    LogDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    CONSTRAINT fk_carlog_car FOREIGN KEY(CarId)REFERENCES car(Id) ON UPDATE CASCADE 
) 

表车用于保存汽车数据并且具有表项目的外键。用于保存汽车中每个移动的表格car_log(日志)。我已经创建了这个表的foreach对象。 在这种情况下,我想在项目中显示每个汽车摘要(每天的差距总和)。 这是我的查询时,我想在项目1Group By和HQL结果

select CarId, DATE(LogDate) dateOnly, sum(Gap)/1000 KM from car_log where CarId IN (SELECT Id FROM car where ProjectId = 1) group by CarId, dateOnly; 

选择每款车的总结,但我不知如何在HQL处理这个问题。我尝试创建新的对象来处理这个问题,但是混淆了使用它。我想问一下如何解决这个问题,

public class CarLogDate { 
    private double km; 
    private Date date; 
    //constructor & setter getter 
} 
+0

你有车表两次。可以发表正确的代码 – PSR 2013-03-22 04:25:29

+0

对不起,谢谢修改。我编辑了我的代码, – 2013-03-22 04:57:45

+0

您是否尝试过任何查询 – PSR 2013-03-22 04:58:54

回答

2

在您的查询刚与实体属性实体名和表列名替换表名。

List<Object[]> list = 
    select CarId, LogDate dateOnly, sum(Gap)/1000 KM 
    from CarLogDate 
    where CarId IN 
     (SELECT Id FROM car where ProjectId = 1) 
    group by CarId, dateOnly; 
+0

谢谢。它的工作原理,我试图写下完整的答案 – 2013-03-26 01:35:21

+0

@MahadiSiregar不用客气 – PSR 2013-03-26 04:01:02

0
List<Object[]> q = sessionFactory.getCurrentSession().createQuery("SELECT O.car.id AS carId, DATE(O.logDate) AS dateOnly, sum(O.gap)/1000 AS Km from CarLog O " + 
      "WHERE carId IN (SELECT id FROM Car c where c.project.id = 1) GROUP BY carId, DATE(O.logDate)").list(); 
for(Object[] a : q) 
    System.out.println(a[0]+" "+a[1]+" "+a[2]); 

或者你可以通过使用对象[]作为一个参数实例化对象。