JPA SQL从实体管理器中选择和求和

时间:2013-11-25 10:55:18

标签: mysql sql jpa entity

以下SQL脚本适用于mysql:

select 
    LOGGING_ID,
    SUM(NORMAL_HOURS +OVERTIME_HOURS +DOUBLE_TIME_HOURS) AS TOTAL_HOURS
FROM
    LOGGING_DETAIL
GROUP BY 1

我如何与我的实体经理一起做这件事?:

@PersistenceContext
    private EntityManager database;

    List<loggingDetail> loggingDetail = new ArrayList<loggingDetail>();
    timeLoggingDetail = database.createQuery("").getResultList();

最后我想要Logging_id以及该ID的总小时数。 感谢

1 个答案:

答案 0 :(得分:1)

实体管理器可以调用您在jpa实体对象上设置的命名查询。我假设你在这种情况下有一个实体对象。我想如果你没有那个对象,你可以在查询中这样做,就像你在问题中列出的一样。我喜欢在实体对象中使用它,因此其他调用可以重用它。

实体对象 -

 @Entity
 @NamedQuery( name = "loggingDetail.getLoggingId", query = "select 
LOGGING_ID,SUM(NORMAL_HOURS +OVERTIME_HOURS +DOUBLE_TIME_HOURS) AS TOTAL_HOURS
 FROM LOGGING_DETAIL GROUP BY 1" )
public class LoggingDetail
{ ...}

实体管理器调用将不会获得完全填充的loggingDetail对象,因为查询未返回完整对象,因此您必须遍历对象数组 -

@PersistenceContext
private EntityManager database;
Query query = database.createNamedQuery( "loggingDetail.getLoggingId" );
List<Object[]> obj = query.getResultList();
    for( Object[] objects : obj )
    {
      String logId = (String) objects[0] ;
      String logTime = (String) objects[1] ;
     }